开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜