2010-03-15 52 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

相關問題