在C ++中使用opencv创建动态库

时间:2014-07-09 23:32:03

标签: c# c++ opencv


我已经用Opencv构建了一个Project,然后在C#中使用它。
但我不能打包我的项目包括opencv库到动态DLL然后在C#中调用它。
有人可以给我一些提示吗? :(
我的代码:

#include "opencv\cv.h"
#include "opencv\highgui.h"
using namespace cv;
extern "C" _declspec(dllexport) string OpenCVTest(string fileName)
{   

     Mat img = imread(fileName);    
     IplImage image = img;  
     cvShowImage("Hello world", &image);
     cvWaitKey(0);
     cvDestroyAllWindows();

     return "";
}

1 个答案:

答案 0 :(得分:0)

您必须使用Pinvoke技术,它允许您从c#代码调用c ++函数。

如果您有用c ++编写的这样的函数

extern "C" {

MYAPI void print_line(const char* str);

}

您可以在c#

中为其定义原型
[DllImport("NativeLib.dll")]
private static extern void print_line(string str);

然后你可以在c#中使用它作为普通函数

如果你想从c#传递std :: string那么你必须使用marshaller,请参考这个

Custom Marshaler for PInvoke with std::string