フレームワーク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パラメーターは にunsigned long型は、C++をumanagedさINT32であるべきです。
オリジナルエラー:
PInvokeStackImbalanceが検出されましたメッセージ:のPInvokeの関数 'への呼び出しは、' スタックをアンバランスがあります。これは、管理対象のPInvokeシグネチャがアンマネージ対象シグネチャと一致しないためです。 PInvokeシグネチャの呼び出し規約とパラメータが、対象となる管理されていないシグネチャと一致することを確認します。
これは質問ではありません。 – Puppy
ダビデはそれを打ちました。 VS2010のデフォルトのプラットフォームターゲット設定がAnyCPUからx86に変更され、ポインタサイズが8バイトから4バイトに変更されたため、コードが失敗しました。明らかに、これは32ビットバージョンのWindowsでデバッグしたことはありません。お客様の機械の故障は保証されていません。偶発的に作動する傾向があります。代わりにFileStream.Write()を使用することは賢明です。 –