码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2015-06-07 21:33:36      阅读:134      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!