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

最新文章

  1. Map工具系列-07-TFS变更集提取工具
  2. CSS-学习笔记二
  3. C++小项目:directx11图形程序(二):systemclass
  4. 连通性1 求无向图的low值
  5. jpush极光推送知识点总结
  6. Lintcode: Interval Sum
  7. mouseover 和 hover 方法
  8. Memcached安装及配置
  9. 【socket】一分钟理清 socket udpsocket tcpsocket tcplistener TCPClient和 UDPClient
  10. Java实战之04JavaWeb-04JSP、EL表达式、JSTL标签库
  11. .NET基本权限管理框架源代码
  12. 为什么JavaScript函数中的参数前面不能加var
  13. codeforces 547B. Mike and Feet 单调栈
  14. Mysql mysqlimport 导入数据
  15. Java常量笔记
  16. 不完全CSS3图解
  17. CSDN不登录阅读全文(最新更新
  18. python修改文件中字符串并写入
  19. 第三百九十七节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说,主题本地化设置
  20. d3.js在vue项目中的安装及案例

热门文章

  1. Java程序测试之线程的同步
  2. BZOJ 2463: [中山市选2009]谁能赢呢?(博弈论)
  3. Javascript事件绑定及深入
  4. 【开源】NodeJS仿WebApi路由
  5. 把时间还给洞察,且看PPT调研报告自动生成攻略
  6. BASH SHELL not a valid identifier
  7. 条件查询php
  8. HTML复习
  9. hudson入门
  10. MySQL中的完整性约束条件(主键、外键、唯一、非空)