c++导出dll给c#调用

在C++端包括创建dll项目、源文件下添加类、头文件对方法添加修饰符及在源文件实现头文件方法;在C#端(非CLR)包括将dll拷贝到运行目录及DllImport定义调用的方法。

1、 创建dll项目

 

 

2、  源文件下添加类

 

 

3、  头文件对方法添加修饰符

extern "C" _declspec(dllexport) double __stdcall TestFuzzy(char * localPath,int cols,int lowThreshold,int heightThreshold);

“extern "C" _declspec(dllexport)”是必备的不然无法导出此方法,“__stdcall”代表参数的顺序

4、  在源文件实现头文件方法

double _stdcall TestFuzzy(char * localPath,int cols,int lowThreshold,int heightThreshold)

{

}

5、  将dll拷贝到运行目录

对C++项目中引用的第三方的库需要一起拷贝过来,如下图引用了OpenCV的库。

 

 

6、  DllImport定义调用的方法

[DllImport("ThirdDll.dll", EntryPoint = "TestFuzzy")]

        public static extern double TestFuzzy(string localPath, int cols, int lowThreshold, int heightThreshold);

7、 对于第三方库的添加

通过NuGet添加或按照手工步骤添加(包括:“工程---属性---配置属性---c/c++---常规---附加包含目录”、“工程---属性---配置属性---链接器---常规---附加库目录”及“工程---属性---配置属性---链接器---输入---附加依赖项”)

8、 注意事项

不能跨DLL传递std::string用char *替代。c#调用c++的类型对照参考

“https://www.cnblogs.com/profession/p/4935100.html”

 

参考:

https://www.cnblogs.com/lgyup/p/7116162.html

https://blog.csdn.net/fuck487/article/details/53036086

https://blog.csdn.net/big_bit/article/details/51595714

https://blog.csdn.net/ooyyee11/article/details/6894436

 

posted on 2018-07-12 01:01  村_长  阅读(2015)  评论(0编辑  收藏  举报

导航