Ответ 1
В этой статье CodeProject есть хороший список: http://www.codeproject.com/kb/dotnet/Win32APICPlusPlustoDotNET.aspx
Существует ли универсальный магазин для определения того, какие .NET типы/атрибуты для использования, учитывая собственный тип?
Пример будет выглядеть примерно так:
Native Type | .NET Type
---------------------------------------
int | Integer
int* | IntPtr (or is it ref int?)
LPCSTR | [MarshalAs(UnmanagedType.LPStr)]String
...
Guidelines for custom structures:
...
Кроме того, в качестве отложенного, какое наиболее надежное место для поиска объявлений для Win32 функционирует?
В этой статье CodeProject есть хороший список: http://www.codeproject.com/kb/dotnet/Win32APICPlusPlustoDotNET.aspx
Вот диаграмма, показывающая разные типы: https://msdn.microsoft.com/en-us/library/ac7ay120(v=vs.100).aspx
pinvoke.net - отличный ресурс для подписи функций win32. В противном случае вам действительно нужно взглянуть на файлы с поддержкой C/С++, чтобы определить вызывающие соглашения и аргументы. Сложные структуры немного сложнее, но самый простой способ - объявить структуру на С#, используя атрибут StructLayout, чтобы убедиться, что все поля выровнены.
Я не знаю ни одного всеохватывающего ресурса для этого (это не значит, что этого не существует, просто я этого не знаю), но есть много информации о MSDN об этом.
Другой инструмент pinvoker для Visual Studio
И еще один инструмент, который преобразует заданный неуправляемый набор файлов и генерирует управляемую dll:
http://www.paulyao.com/res/pinvoke/pinvoke.aspx
Наконец, если вы не хотите загружать какие-либо инструменты, вы всегда можете ссылаться на онлайн-ссылку pinvoke.net для всех неуправляемых библиотек, чтобы получить pinvoke/marshal в качестве определений:
http://www.pinvoke.net/default.aspx/kernel32.waitforsingleobject
Хотя эта страница MSDN называется "Default Marshaling Behavior", она также охватывает явное маршалинг. Например, подраздел "Default Marshaling for Arrays" довольно подробно.
http://msdn.microsoft.com/en-us/library/zah6xy75.aspx
"Marshaling Data with Platform Invoke" также содержит много информации:
Мне нравится помощник взаимодействия. Дайте ему свою декларацию (функции или типа - вам нужен тип, если это параметр для функции), и он дает вам код VB или С#.