由于CF是一个精简(Compact)的.NET Framework,因此在开发CF应用时有一部分功能MS并没有在CF中实现,需要直接调用Win32的API来实现。由于Win32的API是面向native代码的,一般会提供一个DLL库以及相应header文件。使用C++是十分容易和简单调用这些API,但是使用C# .NET就没那么幸运了。C#调用Win32的API往往要借助于P/Invoke的帮助,下面讲述一下P/Invoke 的使用。
API的引入
调用Win32的API需要引入相应的DLL,Wince下大部分的API存在于coredll.dll里面,同时DllImport不仅仅支持Win32 API,他可以支持任何native 的DLL的引入。
[DllImport("coredll.dll", CharSet = CharSet.Auto)]
错误情况处理
调用Win32的API一般通过返回值表示调用结果,推荐使用Exception代替返回值的方式表达错误和异常情况。
int lStatus = RasHangUp(rasSession);if (lStatus != 0){ throw new ApplicationException("RasHangUp(" + rasSession + ") failed with error code: " + lStatus);}
参数的转换
调用Win32的API大部分工作就是在对调用参数进行类型转换,这些参数基于.NET的角度叫做unmanaged type(native type),对应于.NET built-in 的managed type.例如调用查询所有WiFi网卡信息的接口,入口参数为LPWSTR和PINTFS_KEY_TABLE,LPWSTR是字符串指针( Long Pointer to Wide String),而PINTFS_KEY_TABLE是一个结构体。
DWORD WZCEnumInterfaces( LPWSTR pSrvAddr, PINTFS_KEY_TABLE pIntfs);typedef struct{ DWORD dwNumIntfs; PINTF_KEY_ENTRY pIntfs;} INTFS_KEY_TABLE, *PINTFS_KEY_TABLE;
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索net
, c#
, api
, 参数
, win
, 32
, win api
, win32api
p invoke
compact framework、p invoke 32 64、robot framework api、spring framework api、avalon framework api,以便于您获取更多的相关知识。