P/Invoke on 32 bit and 64 bit systems
Let us pick the following Win API call as an example:
BOOL MessageBeep(UINT uType); // from User32.dll
The input parameter is UINT to specify the beep type, which is can be both 32bit and 64bit integer, depending on which Windows version we call it on (or am I wrong?).
If I want to P/Invoke message beep from C#, so I apply the DllImport declaration:
[DllImport("User32.dll")]
static extern Boolean MessageBeep(UInt32 beepType);
Will this code C# work under Windows x64?
- If yes, why is it OK to invoke the call a 32bit integer, while a 64bit integer is expected (assu开发者_开发问答ming that I am correct on this)?
- If no, how should the proper platform agnostic P/Invoke declaration look like in C#?
You are wrong.
However, for types like HANDLE
that do vary with bitness, you should use IntPtr
.
If you're uncertain about a P/Inoke declaration, the first place to check is here.
精彩评论