参见Marshaling Data with Platform Invoke
要调用从非托管库导出的函数,一个.net框架程序需要一个在托管代码中定义好该函数的函数原型。为了创建一个能让系统调用正确进行数据封组的原型,必须做到如下几点:
-
应用DllImportAttribute到托管代码中的静态函数或方法
-
使用托管数据类型替换非托管数据类型
平台调用数据类型
下面的表格列出了用于Win32 API和C风格函数的数据类型。多数非托管库都包含以这些数据类型作为参数或者返回值的函数。第三列列出了对应.Net框架内置的数据类型,用于托管代码。在一些场合中,可以使用列表中相同数据长度的另一类型去替换。
Unmanaged type in Wtypes.h |
Unmanaged C language type |
Managed class name |
Description |
HANDLE |
void* |
32 bits on 32-bit Windows operating systems, 64 bits on 64-bit Windows operating systems. |
|
BYTE |
unsigned char |
8 bits |
|
SHORT |
short |
16 bits |
|
WORD |
unsigned short |