У меня есть существующая dll (написанная на C build с MinGW) и знание ее содержимого (имена функций, параметры, типы возвращаемых данных и т. Д.). Я хочу использовать SWIG для вызова DLL через C #. В качестве пробной версии я попробовал следующие шаги с примером учебника в http://swig.org/tutorial.html
Я превратил example.c в dll примерно так:
gcc -shared -m32 example.c -o mainDLL.dll
Это создало mainDLL.dll. Затем я запустил SWIG на example.i:
swig.exe -csharp example.i
Это создает файлы C # и файл example_wrap.c. PINVOKE ожидает вызова всех функций SWIG в dll с именем example.dll. Поэтому я создаю его, используя оболочку SWIG и mainDLL.dll:
gcc -shared -m32 example_wrap.c mainDLL.dll -o example.dll
Info: resolving _My_variable by linking to __imp__My_variable (auto-import)
Затем я взял две библиотеки и поместил их в папку моего исполняемого файла (bin \ x86 \ Debug). Затем я пытаюсь вызвать содержимое dll через C #, я получаю сообщение об ошибке:
Unhandled Exception: System.TypeInitializationException:
The type initializer for 'examplePINVOKE' threw an exception. --->
System.TypeInitializationException:
The type initializer for 'SWIGExceptionHelper' threw an exception. --->
System.EntryPointNotFoundException:
Unable to find an entry point named 'SWIGRegisterExceptionCallbacks_example' in DLL 'example'.
Я использовал средство обхода зависимостей, чтобы убедиться в наличии SWIGRegisterExceptionCallbacks_example в example.dll. Кто-нибудь знает, как использовать SWIG с существующей DLL?