C#和C++混合编程的一些tips
浏览:3968次 出处信息
最近帮朋友写个小东西的时候,刚好用到了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限制。
建议继续学习:
- C语言中史上最愚蠢的Bug (阅读:7641)
- C的那些事儿 (阅读:5982)
- C 语言的前世今生 (阅读:5753)
- C语言结构体里的成员数组和指针 (阅读:5716)
- 为什么C语言需要函数声明 (阅读:5307)
- C语言的那些个关键字们 (阅读:5178)
- 周末闲谈:C and C++, why use c++? (阅读:4038)
- C++11 中值得关注的几大变化(详解) (阅读:3170)
- Effective C++ 3rd 的一点评论 (阅读:2947)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
后一篇:setjmp 的正确使用 >>
文章信息
- 作者:大树 来源: 大树底下
- 标签: C 混合编程
- 发布时间:2010-05-25 10:23:11
建议继续学习
近3天十大热文
-
[928] WordPress插件开发 -- 在插件使用 -
[134] 解决 nginx 反向代理网页首尾出现神秘字 -
[53] 整理了一份招PHP高级工程师的面试题 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[51] 海量小文件存储 -
[51] 用 Jquery 模拟 select -
[50] 全站换域名时利用nginx和javascri -
[50] Innodb分表太多或者表分区太多,会导致内 -
[49] CloudSMS:免费匿名的云短信 -
[47] jQuery性能优化指南
