Как узнать, какой тип маршалла использует P/Invoke?

Существует ли универсальный магазин для определения того, какие .NET типы/атрибуты для использования, учитывая собственный тип?

Пример будет выглядеть примерно так:

    Native Type    |    .NET Type
---------------------------------------
    int            |    Integer
    int*           |    IntPtr (or is it ref int?)
    LPCSTR         |    [MarshalAs(UnmanagedType.LPStr)]String
     ...

Guidelines for custom structures:
    ...

Кроме того, в качестве отложенного, какое наиболее надежное место для поиска объявлений для Win32 функционирует?

Ответ 3

pinvoke.net - отличный ресурс для подписи функций win32. В противном случае вам действительно нужно взглянуть на файлы с поддержкой C/С++, чтобы определить вызывающие соглашения и аргументы. Сложные структуры немного сложнее, но самый простой способ - объявить структуру на С#, используя атрибут StructLayout, чтобы убедиться, что все поля выровнены.

Я не знаю ни одного всеохватывающего ресурса для этого (это не значит, что этого не существует, просто я этого не знаю), но есть много информации о MSDN об этом.

Ответ 4

Другой инструмент pinvoker для Visual Studio

http://www.pinvoker.com/

И еще один инструмент, который преобразует заданный неуправляемый набор файлов и генерирует управляемую dll:

http://www.paulyao.com/res/pinvoke/pinvoke.aspx

Наконец, если вы не хотите загружать какие-либо инструменты, вы всегда можете ссылаться на онлайн-ссылку pinvoke.net для всех неуправляемых библиотек, чтобы получить pinvoke/marshal в качестве определений:

http://www.pinvoke.net/default.aspx/kernel32.waitforsingleobject

Ответ 6

Мне нравится помощник взаимодействия. Дайте ему свою декларацию (функции или типа - вам нужен тип, если это параметр для функции), и он дает вам код VB или С#.