Получить функции из lib

Во-первых, мои знания C++ ограничены, так же как и я новичок в пинвоке.

У меня есть библиотека с очень старым кодом, который мы хотим использовать с C#, но, конечно, будучи старым, она находится в неуправляемом C++. Я ищу, чтобы сделать C# DLL оболочки для библиотеки. так что в будущем любой, кто хочет использовать код, может просто использовать dll. Однако я могу найти, как экспортировать функцию, чтобы сделать pinvoke. Я попробовал мусорную корзину, но ничего не увидел. Или мне просто нужно получить функции из кода? Ниже находится свалка.

3 ответа

Решение

Что вам нужно сделать, зависит от того, что это за библиотека.

  1. Если это статическая библиотека, то вам нужно собрать DLL и связать файл.lib с этой DLL. Тогда ваш код C# может p/ вызвать к библиотеке, которую вы создали.
  2. Если это библиотека импорта для DLL, то вы просто вызываете p/ прямо в DLL. Файл.lib вам здесь не нужен.

Осторожнее здесь. Я делал что-то подобное, но для Java.

Если ваш код C# работает на 64 битах, то ваша 32-битная библиотека не сможет загружаться. Лучшим вариантом было бы, если бы вы могли получить исходный код и собрать 2 новые версии, 32-битную и 1 64 библиотеку.

Если вы не имеете доступа к исходному коду, можно обойтись в создании 32-битного исполняемого файла, который вызывает вашу библиотеку lib и который можно вызывать как процесс командной строки (оставив его вывод в файле на диске). В этом случае вы можете использовать 32-битный код из 64-битной системы. Конечно, есть штраф за запуск нового процесса и т. Д., Но в зависимости от того, как часто он вызывается, это может быть приемлемым.

"Interop 101" должен вам помочь: часть 2 использует P/Invoke для вызова неуправляемых методов C++ в C#, а часть 4 использует мост C++/CLI.

Другие вопросы по тегам