Доступ к константам и структурам Windows API для P / Invoke - PullRequest
3 голосов
/ 25 февраля 2011

Быстрый вопрос: Как я могу получить доступ к константе BN_CLICKED и другим константам, определенным для Win32 API, из .NET?Они определены в какой-то библиотеке?Я должен определить их сам?Если да, где я могу найти эти значения?И зависят ли значения от версии для версий Windows?

Ответы [ 5 ]

12 голосов
/ 25 февраля 2011

Я считаю 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 больше. Screenshot

Вот статья в журнале MSDN: http://msdn.microsoft.com/en-us/magazine/cc164193.aspx

Оригинальная статья MSDN Magazine за январь 2008 года теперь доступна только в виде файла справки .CHM, связанного с самого низа 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/.

6 голосов
/ 25 февраля 2011

Вы можете загрузить Microsoft Platform SDK и взглянуть на файлы заголовков (*.h).Например, BN_CLICKED определяется в файле winuser.h.

Обычно, если вам нужна только одна или две константы, достаточно Поиск в Google и просмотр первых нескольких результатов, поскольку там выводится значение.

4 голосов
/ 25 февраля 2011

http://pinvoke.net/ является отличным ресурсом для этого многих общих определений P / Invoke .

1 голос
/ 05 декабря 2017

Веб-сайт MagNumDB (пользователь SO Симон Мурье ) - это простой способ поиска констант:

http://www.magnumdb.com/search?q=BN_CLICKED

enter image description here

0 голосов
/ 08 января 2017

Это своего рода подтверждение концепции, но я собрал скрипт , который может найти практически любую константу 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 делает все возможное, чтобы этого не случилось.

Однако я видел по крайней мере одно место, где константы различаются в зависимости от того, на какой платформе / архитектуре вы компилируете. Я не предполагаю, что только потому, что ваш код работает на 64-битной Windows x86, он будет работать на 32-битной Windows RT ARM, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...