SWIG Wrap Существующая DLL - PullRequest
0 голосов
/ 09 июля 2019

У меня есть существующая 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?

...