C# Tips之C++混编

写在前面

C# Tips是博主开启的第一个项目,以C#为示例语言,旨在普及编程技巧、经典算法以及计算机视觉、图形学知识。

C++的优势

从代码优美度上来看,C++确实不如C#,C++的语法规则特别复杂,而且面向对象机制不够完善(比如多继承)。但是从代码运行的效率来看,C++和C一样更加接近底层,比C#运行更快。另外,C++的编译结果基本无法反编译出源代码,比C#更加安全。因此大多数高级的库都采用C++语言进行开发,当这些库没有.NET版本时,C++混编则是一种有效的代码编写方案。

C++混编

混编原理

最常用的混编方式是利用C++生成动态链接库(dll),然后利用C#提供的方法去调用动态链接库中的方法,下面以VS2010为例进行演示。

C++成库

1)首先创建dll工程PclTool,你将会得到如下的几个文件:
在这里插入图片描述
需要导出到dll的方法可直接写在PclTool.cpp文件中,其他文件无特殊情况无需更改。
2)按如下格式编写方法:

extern "C" __declspec(dllexport) int StOutlierRemove(const char* path,bool isSparse,int* removal,int meanK,double stddevMulThresh)
{
}

extern “C” __declspec(dllexport) 是方法导出到dll的前缀,后面格式与普通方法一致。
3)编译生成即可得到dll。

C#调用

首先强调一点:默认情况下,dll只能放在与exe文件相同目录下,否则C#将无法找到dll,可以尝试添加系统环境变量,但是这样程序无法很好地进行移植。
C#调用PclTool.dll中的方法格式如下:

[DllImport("PclTool.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int StOutlierRemove(char[] path, bool isSparse, int[] removal, int meanK, double stddevMulThresh);

注意方法名称、返回值和参数都要与C++中保持一致,其中char*对应char[](并不是string),int*对应int[],更加复杂的参数对应关系可参考官方文档或其他博主文章。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值