[原]C#与非托管——初体验
2024-10-12 11:34:40
P/Invokes初看起来非常简单,利用DllImport进行extern函数的声明,程序就可以在调用extern函数的时候自动查询调用到对应的非托管函数,有些类似Java的native函数,但更为简单,不需要编写相应的C函数导出。例如
[DllImport(LIB, CallingConvention = CallingConvention.Cdecl)]
public static extern void testfunc();
简单的P/Invokes封装可以把C库头文件的函数全部复制过来,并按照如下规则进行修改(可以通过正则表达式查找替换搞定):
C#的基元类型都可以在C里面找到对应的类型(decimal和object除外,size_t需要特别注意,要用IntPtr对应)
参数和返回值里面的字符串可以替换成string;
参数里面的char *或const char *等之类的内存块数据可以替换成byte[];
参数和返回值里面的函数指针可以先声明参数和返回值类型兼容的delegate,然后替换成delegate;
其他指针类型可以替换成IntPtr;
...不定长度参数的函数和va_list参数的函数没找到如何映射的,最终只能放弃导入自己用C#实现;
传递类/结构值而非指针的函数不知道如何声明,暂时没有这个需求。
最新文章
- Map工具系列-07-TFS变更集提取工具
- CSS-学习笔记二
- C++小项目:directx11图形程序(二):systemclass
- 连通性1 求无向图的low值
- jpush极光推送知识点总结
- Lintcode: Interval Sum
- mouseover 和 hover 方法
- Memcached安装及配置
- 【socket】一分钟理清 socket udpsocket tcpsocket tcplistener TCPClient和 UDPClient
- Java实战之04JavaWeb-04JSP、EL表达式、JSTL标签库
- .NET基本权限管理框架源代码
- 为什么JavaScript函数中的参数前面不能加var
- codeforces 547B. Mike and Feet 单调栈
- Mysql mysqlimport 导入数据
- Java常量笔记
- 不完全CSS3图解
- CSDN不登录阅读全文(最新更新
- python修改文件中字符串并写入
- 第三百九十七节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说,主题本地化设置
- d3.js在vue项目中的安装及案例