,C#中的IntPtr类型称为“平台特定的整数类型”,它们用于本机资源,如窗口句柄。资源的大小取决于使用的硬件和操作系统,但其大小总是足以包含系统的指针。所以,在您调用的API函数中一定有类似窗体句柄这样的参数,那么当您声明这个函数时,您应该将它显式地声明为IntPtr类型。例如,在一个C#程序中调用Win32APImciSendString函数控制光盘驱动器,这个函数的函数原型是:MCIERRORmciSendStringLPCTSTRlpszCommand,LPTSTRlpszReturnString,UINTcchReturn,HANDLEhwndCallback;首先在C#中声明这个函数:privatestaticexternlongmciSendStringstringa,stringb,uintc,IntPtrd;然后用这样的方法调用:mciSendString"setcdaudiodooropen",null,0,this.Handle;您也可以使用IntPtr.Zero将句柄设置为0;或者使用类型强制转换:mciSendString"setcdaudiodooropen",null,0,IntPtr0;或者,使用IntPtr构造函数:IntPtra=newIntPtr2121;这里有两点比较重要:一是在C#中声明Win32API时,一定要按照WinAPI的原型来声明,不要改变它的数据类型;二是尽量不要过多使用类型强制转换或构造函数的方式初始化一个IntPtr类型的变量,这样会使程序变得难于理解并容易出错。希望这些信息对您有帮助。
齐景波2019-10-14 21:00:16