技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> C#和C++混合编程的一些tips

C#和C++混合编程的一些tips

浏览:3245次  出处信息

最近帮朋友写个小东西的时候,刚好用到了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限制。

建议继续学习:

  1. C语言中史上最愚蠢的Bug    (阅读:7030)
  2. C的那些事儿    (阅读:5340)
  3. C 语言的前世今生    (阅读:4953)
  4. 为什么C语言需要函数声明    (阅读:4676)
  5. C语言结构体里的成员数组和指针    (阅读:4595)
  6. C语言的那些个关键字们    (阅读:4469)
  7. 周末闲谈:C and C++, why use c++?    (阅读:3112)
  8. C++11 中值得关注的几大变化(详解)    (阅读:2527)
  9. Effective C++ 3rd 的一点评论    (阅读:2123)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1