我有一个现有的dll(使用MinGW用C构建编写),并且了解其内容(函数名称,参数,返回类型等)。我想使用SWIG通过C#调用dll。作为试用版,我尝试了http://swig.org/tutorial.html
中的教学示例的以下步骤我将example.c转换为如下所示的dll:
gcc -shared -m32 example.c -o mainDLL.dll
这创建了mainDLL.dll。然后,我在example.i上运行SWIG:
swig.exe -csharp example.i
这将创建C#文件和example_wrap.c文件。 PINVOKE希望在名为example.dll的dll上调用所有SWIG函数。因此,我使用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)
然后,我将这两个dll放入可执行文件的文件夹(bin \ x86 \ Debug)中。然后我尝试通过C#调用dll的内容,但出现错误:
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一起使用?