C#和C++混合编程的一些tips
最近帮朋友写个小东西的时候,刚好用到了C#和C++的混合编程,记录一些tips供日后参考。
首先说明下环境:C#调用C++的库函数,C++建立一个非托管类库项目,C#项目引用之。
1.C++类库中的tips
C++类库中导出函数的声明如下:
extern "C" __declspec(dllexport) int* Detect(char* data,int width,int height);
需要注意的是:
要使用 extern " C " 标明,否则C#调用时会找不到方法名;其次要使用__declspec(dllexport)标明为导出函数。
2.C#调用的tips
C#调用时,首先需要声明外部方法的签名,如下:
[DllImport("DetectDll.dll", CallingConvention = CallingConvention.Winapi)] public extern static void Detect ([MarshalAsUnmanagedType.LPArray,SizeConst=8]byte[] bp,int w,int h,[MarshalAsUnmanagedType.LPArray,SizeConst=4]int[] result);
需要注意的是:
指明CallingConvention为Winapi类型;
对于数组类型需要指明MarshalAs的方式,一般的定长数组或下标有上限的,都可以用LPArray来Marshal。
3.其它
调用非托管代码需要使用unsafe关键字,对于指针需要进行fixed限制。
「其他文章」
- rpm删除出现”error: %preun( ) scriptlet failed, exit status 1解决方法
- C#和C 混合编程的一些tips
- 使用reposync同步yum源
- 对TokyoTyrant的一个简单的patch,以支持列出所有的Key
- 关于tokyocabinet的list操作
- Clojure世界:API文档生成
- 网站分析常用英语名词速览
- 网站分析的应用和价值
- 新闻聚合之Google news模式与 Techmeme模式
- 杨建:网站加速--实例分析篇
- 批量替换标签为PHPmailer显示格式
- 过滤部分字段重复的数据
- CSS排版:技术与最佳实践
- 胖胡斐说淘宝促销之一:促销之“商”
- 我们什么时候应该使用异常?
- 【社会化设计】自我(self)部分――邀请之发送邀请
- 让服务器响应整个网段中的请求
- 使用SeaJS实现模块化JavaScript开发
- 使用windows7的virtual PC打造原装IE6、IE7、IE8测试环境
- 关于恐惧的自白