首页 > Windows开发 > 详细

[原]C#与非托管——初体验

时间:2015-06-07 21:32:58      阅读:263      评论:0      收藏:0      [点我收藏+]

P/Invokes初看起来非常简单,利用DllImport进行extern函数的声明,程序就可以在调用extern函数的时候自动查询调用到对应的非托管函数,有些类似Java的native函数,但更为简单,不需要编写相应的C函数导出。例如

[DllImport(LIB, CallingConvention = CallingConvention.Cdecl)]

public static extern void testfunc();

简单的P/Invokes封装可以把C库头文件的函数全部复制过来,并按照如下规则进行修改(可以通过正则表达式查找替换搞定):

  1. C#的基元类型都可以在C里面找到对应的类型(decimal和object除外,size_t需要特别注意,要用IntPtr对应)

  2. 参数和返回值里面的字符串可以替换成string;

  3. 参数里面的char *或const char *等之类的内存块数据可以替换成byte[];

  4. 参数和返回值里面的函数指针可以先声明参数和返回值类型兼容的delegate,然后替换成delegate;

  5. 其他指针类型可以替换成IntPtr;

  6. ...不定长度参数的函数和va_list参数的函数没找到如何映射的,最终只能放弃导入自己用C#实现;

  7. 传递类/结构值而非指针的函数不知道如何声明,暂时没有这个需求。

[原]C#与非托管——初体验

原文:http://www.cnblogs.com/libla/p/4559088.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!