C++调用 C# dll 的问题

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++

3个回答

涉及到C++的类,这个比较复杂,建议你先在c++里包装下,用简单的结构体类型

zhangxinyan00
zhangxinyan00 你的意思是在C++里再封装一个动态库,将这个类里的成员函数的返回结果作为变量放在结构体里?那这个类里成员函数返回值为void类型的要怎么办呢?我是要调用这个 virtual void process()函数的。
2 年多之前 回复

#要用托管C++,托管C++C#是可以调用的。用__gc

实现步骤:

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.
这样做一下试试可以不?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问