class ObjectResult
{
public:
int objid;
std::vector<cv::Rect> track;
};
class TrackingResult
{
public:
std::vector tracks;
};
class Tracker
{
public:
Tracker(){}; //构造函数,给对象初始化
virtual ~Tracker(){}; //析构函数,在程序运行结束后,清理一些空间
virtual bool init(const char* configFile)=0; //=0代表“纯虚函数”
virtual void process(cv::Mat& color, int frameNum,cv::Rect roi)=0; //检测跟踪过程
virtual TrackingResult* getResult()=0; //获取检测跟踪后的一些结果参数
virtual void draw(cv::Mat& img)=0; //将检测跟踪结果画出来
};
extern "C" TRACKERAPI Tracker* CreatTracker(); //可被外部调用的C函数
这是C++的动态库的对外接口函数,怎么在C#里声明,调用呢?
#要用托管C++,托管C++C#是可以调用的。用__gc
涉及到C++的类,这个比较复杂,建议你先在c++里包装下,用简单的结构体类型
实现步骤:
1、生成密钥文件用于给程序集强名称签名(必须)
sn -k MyKey.snk
2、使用强名称签名的Key编译成类库Tester.DLL
csc /t:library /keyfile:MyKey.snk Tester.cs
3、生成类型库 (此tlb文件提供给Delphi导入, 使用OLE方式调用此步可省略了)
tlbexp Tester.dll /out:Tester.tlb
4、生成注册DLL的注册表文件
regasm Tester.DLL /regfile:Tester.reg
5、运行Tester.reg
将上面四个步骤打包成一个BAT文件自动生成DLL, 在运行Delphi程序前请先运行Tester.reg注册COM.
这样做一下试试可以不?