Самый простой способ генерировать код P / Invoke? - PullRequest
20 голосов
/ 22 марта 2010

Я опытный программист .Net, но не собирал программы на C / C ++ в своей жизни. Теперь у меня есть этот C-dll, заголовки и документация (сторонняя, не из Win API), из которой мне нужно вызвать около десяти методов.

Я думал об использовании Platform Invoke. Я нашел эти три инструмента, которые создали бы код для меня:

и, возможно,

У Pinvoker, похоже, немного другой подход, чем у Interop assistant и Wizard. Swig я только что обнаружил, проверяя, что этот вопрос здесь не задавался.

Каковы плюсы и минусы этих инструментов?

Что было бы лучшим = самым простым и безопасным для меня способом создания кода P / Invoke, учитывая, что я мало что знаю о C / C ++?

Ответы [ 2 ]

4 голосов
/ 22 марта 2010

См. http://dotnetperls.com/dllimport-interop для примера взаимодействия, и эту статью MSDN для получения дополнительной информации. Библия для этого материала: книга Адама Натана .

В основном вам нужно будет определить функции в той DLL, которую вы хотите вызвать. Они должны быть отмечены с помощью extern, чтобы сделать их доступными для внешнего мира. Следующий шаг, который может оказаться сложным, - написание DllImport для функции. Это необходимо для сопоставления между управляемым и неуправляемым миром. Вам нужно будет разобраться, как преобразовать любые сложные структуры данных из DLL в управляемый код.

Вы должны проверить, есть ли какой-либо интерфейс COM к DLL. Убедитесь, что вам действительно нужно использовать P / Invoke.

SWIG изначально предназначался для переноса кода C / C ++ для использования на языках сценариев. Он генерирует код C # из описания интерфейса (см. учебник ). Я бы не рекомендовал использовать его из C #, если P / Invoke является опцией.

2 голосов
/ 23 марта 2010

если сигнатуры функций просты, то для установки потребуется 10 минут - т.е. если они берут 2 символа * и возвращают int.Только когда они усложняются, становится грязно

Библия на pinvoke Адам Натанс - .NET и COM: Полное руководство по взаимодействию

И я согласен сплакат - глоток это не то, что нужно

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