WriteFile函数的使用产生1(成功),但返回错误代码87

时间:2014-04-22 05:21:57

标签: c# marshalling

我目前正在使用WriteFile函数禁止看门狗进入嵌入式系统。该函数实际上有效,但同时它返回错误代码87.我尝试调试函数中的参数,但我仍然得到错误代码。

Marshalling part:    
[DllImport("coredll.dll", SetLastError = true)]
private static extern int WriteFile(IntPtr hwnd, byte[] lpInBuffer, uint nNumberOfBytesToWrite,  ref uint lpNumberOfBytesWritten, IntPtr lpOverlapped);

Usage:
byte[] Arg = new byte[1];
Arg[0] = 0x87;
uint WrittenByte = 0;
int returnWatchDogTouch = 0;

returnWatchDogTouch = WriteFile(InitDevices.DeviceHandleWDT, Arg, 1,ref WrittenByte, IntPtr.Zero);
int error = Marshal.GetLastWin32Error(); //Getting error value 87 in this line

returnWatchDogTouch的返回值为1,后续行返回错误代码87。感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

成功时,

GetLastError不一定由函数设置。在这种情况下,有些函数会将值设置为零,有些则不会。

在您呼叫的功能指示失败后,您应该只调用GetLastError以获取更具体的错误信息。在您的情况下,WriteFile会返回1表示成功。