CPP和C#交互实践

CPP和Net交互实践

引入

NET调用C++,使用CLR的方式,可以有以下两种

  • CPP纯粹的动态库 + CLR包装的动态库 + NET程序
  • CLR动态库(包含了业务逻辑代码) + NET程序

关于如果包含库

快速验证

  1. 如果你想快速验证CLR/CLI/C++的混合编程,可以新建一个CLR的控制台程序,直接包含你的C++源码,编译运行即可这玩意是用C++写代码,编译为NET.
  2. 如果你想测试数据交互,可以建立一个基本的CLR动态库+一个简单的NET控制台,CLR动态库可以使用标准的C++和扩展的CLR/C++语法,可以看到哪些函数签名可以正常导出.因为即使你把class导出,public ref class myclass,也不是所有的public函数能被C#识别,如果你的函数签名带有std::vector或者std::string等,他是导不出来的

CLR动态库开发(含普通动态库)

新建项目

VS新建CLR动态库项目,这样就会默认加入CLR的支持,如果是通用的DLL动态库,需要手动开启该功能

image-20220617084459876

设置项目

  1. 设置X86平台,当然也可以设置为AnyCPU,但是如果出现了加载格式不正确,应当首先回来看这个

  2. 关闭预处理器,可有可无,如果后续有问题,可以关闭C/C++ > 预编译头 > 不使用预编译头

    image-20220617084846111
  3. 删除DLLmain文件及函数,如果你是以不通动态库创建的

  4. 添加头文件路径C/C++ > 常规 > 附加包含目录

    image-20220617084933039
  5. 更改输出路径,如果需要的话常规 > 输出目录 /中间目录

    image-20220617085038671
  6. 如果你的源码库有很多警告,一些诸如野指针的问题等,可以先关闭SDL检查,C/C++ > SDL检查

    image-20220617085214398
  7. 添加预定义的宏,来处理你的头文件,一般用作导出或者导入符号使用,这个在CLR的库可以不用,在常规的动态库一般需要的,C/C++> 预处理器 > 预处理定义

    image-20220617085359534
  8. 链接常规的动态库,如果你的CLR库使用了常规的动态库,VC++目录 > 库目录 添加具体的目录,链接器 > 输入> 附加依赖项 添加库的名字,比如my.lib

    image-20220617085701246 image-20220617085816623
posted @ 2022-06-17 13:09  zongzi10010  阅读(149)  评论(0编辑  收藏  举报