我有一个已编译的DLL(C / C ++),我必须在Java中使用它。所以我想使用SWIG创建一个包装器。我遵循了所有教程:
但是在所有示例中都没有使用预编译的DLL和/或Java和/或Visual Studio(2015)。当使用自己的cpp文件进行实现(并且不使用外部DLL,实现头部)时,一切正常(编译为单个DLL并从Java调用)。
那么我想要什么:拥有预编译的DLL(example.dll),该标头(example.h)和SWIG头文件(example.i)。将所有内容编译为“包装DLL”,在Java中加载此文件并访问预编译的DLL(example.dll)。
我的详细步骤:
有人能帮助我吗?
我也没有得到:结果将是“example.dll”。我必须在Java中使用此DLL(使用System.load / loadLibrary)。这个SWIG DLL如何使用里面的所有逻辑访问“原始”example.dll?
使用Python而不是Java导致同样的失败(LNK2019 - 未解析的外部符号)。
答案 0 :(得分:0)
基本上,您需要将调用“转发”到外部库。即从那里将符号导入包装器库并与外部DLL lib文件链接。
如果你没有DLL的这样一个lib文件,你需要创建它(例如using some tool来自DLL的create lib),或者在运行时加载外部库/导入符号({{ 1}} / LoadLibrary
)。
答案 1 :(得分:0)
axalis的答案是绝对正确的。这里有一些细节: