當我從Framework 2遷移到框架4後,當運行WriteFile函數時出現錯誤。在WriteFile kernel32.dll上檢測到PInvokeStackImbalance
[DllImport("kernel32.dll")]
public static extern bool WriteFile(SafeHandle hFile,
byte[] lpBuffer,
uint nNumberOfBytesToWrite,
out uint lpNumberOfBytesWritten,
long lpOverlapped);
解決方案:
[DllImport("kernel32.dll")]
public static extern bool WriteFile(SafeHandle hFile,
byte[] lpBuffer,
uint nNumberOfBytesToWrite,
out uint lpNumberOfBytesWritten,
**Int32** lpOverlapped);
的lpOverlapped參數應該是一個INT32,這是一個無符號長在 umanaged C++。
原始錯誤:
檢測PInvokeStackImbalance 消息:一個調用的PInvoke函數 '' 具有不平衡堆棧。這很可能是因爲託管的PInvoke簽名與非託管目標籤名不匹配。檢查PInvoke簽名的調用約定和參數是否與目標非託管簽名相匹配。
這不是問題。 – Puppy
大衛釘了它。您的代碼失敗,因爲VS2010中的默認平臺目標設置從AnyCPU更改爲x86,將指針大小從8字節更改爲4字節。顯然你從來沒有在32位版本的Windows上調試過。無法保證客戶機器上的故障,它往往意外工作。使用FileStream.Write()取而代之將是明智的。 –