2010-03-15 74 views
2

让我们选择以下运API调用作为一个例子:P /调用在32位和64位系统

BOOL MessageBeep(UINT uType); // from User32.dll 

输入参数是UINT指定蜂鸣类型,它是既可以是32位和64位整数,这取决于我们称之为的哪个Windows版本(或我错了吗?)。

如果我想P /从C#调用信息提示音,所以我申请了的DllImport声明:

[DllImport("User32.dll")] 
static extern Boolean MessageBeep(UInt32 beepType); 

威尔的Windows 64下的这段代码C#的工作?

  • 如果是的话,为什么可以调用一个32位整数,而期望一个64位整数(假设我对此是正确的)?
  • 如果否,那么适当的平台不可知的P/Invoke声明应该如何在C#中看起来像?

回答

5

你错了。

但是,对于像HANDLE这样的类型,根据比特度的不同,应该使用IntPtr

如果您不确定P/Inoke声明,首先检查的地方是here

+0

为什么DWORD比特性依赖,而UINT不是?这看起来与我阅读的C数据类型文档相反。 Windows数据类型页上的MSDN: http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx DWORD:typedef unsigned long DWORD; UINT:typedef unsigned int UINT; – user256890 2010-03-15 13:58:27

+0

你是对的;我的意思是“手柄”。 – SLaks 2010-03-15 14:03:27

+1

为了扩展您的答案,我在32位/ 64位安全编码上找到了以下MSDN建议: http://msdn.microsoft.com/en-us/library/aa384242(VS.85).aspx – user256890 2010-03-15 14:20:12