C#导入DLL时,参数怎么定义是一个比较头痛的问题。特别是指针类型的参数,关于此问题本人有点不成熟的经验。
以 GetComputerName这个函数为例。
函数原型如下
BOOL GetComputerName( LPTSTR lpBuffer, LPDWORD lpnSize );
这个lpBuffer就是下个string型的指针,其实无论是什么类型的指针,对于Windows来说都是一个32位的无符号的整数,也就是一个内在地址,函数之所以使用指针就是要向指针所指向的内存空间写入数据。
我们用C#调用时也要给它传递一个指针,还要对应一块分配的空间 。
下面是代码:
using
System.Runtime.InteropServices;
[DllImport( " kernel32.dll " )]
static extern bool GetComputerName(IntPtr p , ref int lpnSize);
// 分配空间
IntPtr p = Marshal.AllocHGlobal( 128 );
// Console.WriteLine(p); 指针内容 也就是内存地址
int len = 128 ;
GetComputerName(p, ref
[DllImport( " kernel32.dll " )]
static extern bool GetComputerName(IntPtr p , ref int lpnSize);
// 分配空间
IntPtr p = Marshal.AllocHGlobal( 128 );
// Console.WriteLine(p); 指针内容 也就是内存地址
int len = 128 ;
GetComputerName(p, ref