CPP和C#交互实践
CPP和Net交互实践
引入
NET调用C++,使用CLR
的方式,可以有以下两种
- CPP纯粹的动态库 + CLR包装的动态库 + NET程序
- CLR动态库(包含了业务逻辑代码) + NET程序
快速验证
- 如果你想快速验证
CLR/CLI/C++
的混合编程,可以新建一个CLR的控制台程序
,直接包含你的C++
源码,编译运行即可这玩意是用C++写代码,编译为NET. - 如果你想测试数据交互,可以建立一个基本的
CLR动态库
+一个简单的NET控制台
,CLR动态库
可以使用标准的C++
和扩展的CLR/C++
语法,可以看到哪些函数签名可以正常导出.因为即使你把class
导出,public ref class myclass
,也不是所有的public
函数能被C#
识别,如果你的函数签名带有std::vector
或者std::string
等,他是导不出来的
CLR动态库开发(含普通动态库)
新建项目
VS
新建CLR动态库项目
,这样就会默认加入CLR
的支持,如果是通用的DLL
动态库,需要手动开启该功能
设置项目
-
设置
X86
平台,当然也可以设置为AnyCPU
,但是如果出现了加载格式不正确,应当首先回来看这个 -
关闭预处理器,可有可无,如果后续有问题,可以关闭
C/C++ > 预编译头 > 不使用预编译头
-
删除
DLLmain
文件及函数,如果你是以不通动态库创建的 -
添加头文件路径
C/C++ > 常规 > 附加包含目录
-
更改输出路径,如果需要的话
常规 > 输出目录 /中间目录
-
如果你的源码库有很多警告,一些诸如野指针的问题等,可以先关闭
SDL检查
,C/C++ > SDL检查
-
添加预定义的宏,来处理你的头文件,一般用作导出或者导入符号使用,这个在
CLR
的库可以不用,在常规的动态库一般需要的,C/C++> 预处理器 > 预处理定义
-
链接常规的动态库,如果你的
CLR库
使用了常规的动态库,VC++目录 > 库目录
添加具体的目录,链接器 > 输入> 附加依赖项
添加库的名字,比如my.lib