2014-04-22 68 views
0

我目前正在使用WriteFile函數來禁止看門狗在嵌入式系統中流逝。該函數實際上工作,但同時它返回一個錯誤代碼87.我試着調試函數中的參數,但我仍然得到錯誤代碼。WriteFile函數的使用產生1(成功),但返回錯誤代碼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。任何幫助表示讚賞,謝謝。

+3

如果函數成功,則不一定會設置最後的錯誤代碼。也就是說,當你調用的函數表明失敗時,你應該只有'GetLastError'。 – jlahd

+0

@jlahd添加更多描述並將其作爲答案。你真的很棒。 – Corey

回答

1

GetLastError當它們成功時不一定由函數設置。在這種情況下,有些函數會將值設置爲零,有些則不會。

你應該只打電話GetLastError獲得更多的具體錯誤信息後,你打電話表明失敗。在你的情況下,WriteFile返回1成功。

+0

我明白了,我一直認爲GetLastError會迴應以前的陳述,無論在任何情況下。感謝您的解釋。 – Ytan

相關問題