快速問題:如何訪問.NET中爲Win32 API定義的BN_CLICKED常量和其他常量?它們是否在某個庫中定義?我必須自己定義它們嗎?如果是這樣,我在哪裏可以找到這些值? Windows版本之間的版本特定值是什麼?訪問用於P/Invoke的Windows API常量和結構
回答
我發現PInvoke Interop Assistant確實有幫助: http://blogs.microsoft.co.il/blogs/sasha/archive/2008/01/12/p-invoke-signature-generator.aspx。
它幾乎所有東西都可以爲你轉換C++到C#/ VB。我很少,如果有的話,再次求助於google/pinvoke.net。
這裏的MSDN雜誌文章:http://msdn.microsoft.com/en-us/magazine/cc164193.aspx
原來的2008年1月MSDN雜誌文章,現在只用一個.CHM help file download,從https://msdn.microsoft.com/magazine/msdn-magazine-issues最底部鏈接。 (列「CLR Inside Out:管理和非託管代碼之間的封送」。)
而這裏的下載:http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/CLRInsideOut2008_01.exe。源代碼可在http://clrinterop.codeplex.com/找到。
您可以下載Microsoft Platform SDK並查看頭文件(*.h
)。例如。 BN_CLICKED
在winuser.h
文件中定義。
通常,如果您只需要一個或兩個常量,則可以使用Google search並查看前幾個結果,因爲該值會打印在那裏。
對於WM_COMMAND,這是有用的和標準的。但是我發現了兩個與谷歌BN_CLICKED不同的值。 – Squirrelsama 2011-02-25 20:51:02
@Legatou沒有規則沒有例外;-)在我看來,平臺SDK頭部絕對是最好的選擇。 – 2011-02-25 20:53:19
http://pinvoke.net/是
一個很好的資源此
許多常見的P/Invoke定義。
真的嗎?我發現PInvoke.net非常適合方法簽名。我試圖找到'BN_CLICKED',但沒有成功。 – 2011-02-25 20:52:38
@Uwe Keim - 你說得對 - 我認爲這是'BM_CLICK'的錯字,但看起來像'BN_CLICKED'確實存在。我也無法在pinvoke.net上找到它。 – Justin 2011-02-25 20:54:55
這是一種概念驗證,但我把a script放在一起,可以查找大多數Windows API常量。用法示例:
PS > .\Get-WindowsSDKConstant.ps1 BN_CLICKED
0
PS > .\Get-WindowsSDKConstant.ps1 BN_DBLCLK
5
PS > .\Get-WindowsSDKConstant.ps1 WM_COMMAND
273
它需要你下載Visual Studio和Windows 10 SDK,因爲幕後的它編譯一個程序,查找該常數。
最後,這裏的一些答案,提問者的問題:
爲[常量]在一些庫中定義的?
權威人士是Windows Platform SDK
我必須定義他們自己?
它們不是內置於Windows或.NET,這意味着您可能自己定義它們(或從某處複製它們)。
而且是Windows版本之間版本特定的值?
它們非常穩定,因爲否則當用戶升級到更新版本的Windows時,爲一個版本的Windows編譯的程序可能會停止工作。 Microsoft竭盡全力防止這種情況發生。
但是,我已經看到至少有一個地方的常量是不同的,取決於你編譯的平臺/架構。例如,我不會認爲僅僅因爲你的代碼在x86 64位Windows上工作,它就可以在ARM 32位Windows RT上工作。
- 1. C#PInvoke結構與類訪問衝突
- 2. 的PInvoke的結構
- 3. 訪問和結構
- 4. 用於分組常量的F#結構
- 5. 訪問結構變量
- 6. 訪問基於結構名
- 7. C#Pinvoke IntPtr結構和內存
- 8. Windows API MONITORINFO結構
- 9. 建議的結構和用戶訪問
- 10. 常量結構中的結構元素的常量指針
- 11. 訪問變量的聯合的結構
- 12. 訪問返回的結構變量
- 13. 訪問向量的SIZE_TYPE一個結構
- 14. 訪問類中的結構變量
- 15. 訪問結構變量的名稱
- 16. 訪問結構
- 17. 訪問結構
- 18. 如何訪問結構中的結構內的變量
- 19. Python C-API訪問字符串常量
- 20. C++常量結構指針不可訪問
- 21. 無法訪問結構數組中的成員變量結構
- 22. 如何訪問另一個結構中的結構變量?
- 23. C++初學者 - 使用結構和常量時遇到問題!
- 24. 訪問常量
- 25. 訪問的結構是在結構
- 26. 訪問結構的結構裏面QML
- 27. 按偏移量訪問結構
- 28. 如何訪問嵌套結構變量
- 29. fstream直接訪問結構體變量
- 30. 在結構中訪問指針變量
沒有源是完美的。網絡感染了不良的VB6聲明,pinvoke.net通常是含糊不清和誤導性的,pinvoke助手只是生成難看的機器,SDK需要掌握C語言技能。只有一個近乎完美的一個:stackoverflow.com – 2011-02-25 21:28:30