一、IntPtr是什么
首先,让我们看看:在MSDN中用于表示指针或句柄的特定于平台的类型。 这表明了两个事实: IntPtr是平台特定的类型,可用于表示指针和句柄。
C#的IntPtr类型称为“特定于平台的整数类型”,用于窗口句柄等本机资源。 资源的大小取决于所使用的硬件和操作系统,但足够大以包含指向系统的指针。 因此,也可以包括资源的名称。 因此,要调用的API函数必须具有类似表单句柄的参数,因此在声明函数时必须将其显式声明为IntPtr类型。 例如,在C#程序中调用Win32API mciSendString函数来控制磁盘驱动器。 此函数的原型是mcierrormcisendstring lpctstrlpszcommand,lptstr lpsz返回字符串,uintccccand ),首先在C#中声明此函数。 [dllimportwinmm.dll ) ]隐私保护语言语言mcisendstring stringa、string b、uint c、IntPtr d ); 然后,用以下方法调用: mcisendstring setcdaudiodooropen )、null、0和this.Handle。 也可以使用IntPtr.Zero将句柄设置为0。 或使用类型强制转换: mcisendstring ‘ setcdaudiodooropen ‘,null,0,IntPtr )0); 或者,使用IntPtr构造函数。 intptra=newintptr2121;
二、这里有两点很重要。 另一方面,用C#声明Win32API时,请务必按照WinAPI的原型进行声明,不要改变其数据类型。 2、在不太使用类型强制转换和构造函数的情况下初始化IntPtr类型的变量,程序变得不容易理解,容易发生错误。
三、在哪里使用
1) C#调用WIN32 API时
)2)当C#调用用C/C编写的DLL时实际上与1相同,但这通常在我们与他人合作开发时很常用)。