わかりました、.NET 4.0 で C# の SetFilePointer 関数を使用しています。以下は、この関数を呼び出すために使用した dllimports です。
[DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
static extern uint SetFilePointer([In] SafeFileHandle hFile, [In] long lDistanceToMove, [Out] out int lpDistanceToMoveHigh, [In] EMoveMethod dwMoveMethod);
デバッガーで SetFilePointer 関数を使用するコードを実行するたびに、次の例外が発生します。
PInvokeStackImbalance was detected
Message: A call to PInvoke function 'MyDiskStuff!MyDiskStuff.HardDisk::SetFilePointer' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.
デバッガーの外で同じコードを実行するたびに、上記の例外は発生しません。
以下は、SetFilePointer を呼び出すために使用しているコードです。
public enum EMoveMethod : uint
{
Begin = 0,
Current = 1,
End = 2
}
uint retvalUint = SetFilePointer(mySafeFileHandle, myLong, out myInt, EMoveMethod.Begin);
dllimport 署名に何か問題がありますか?