我有一个带有标题的第三方dll文件,如下所示。
class MyClass
{
public:
MyClass() {};
virtual ~MyClass() {};
int Double(int x);
};
我无法使用JNA连接dll文件(因为我不能在这里使用)。所以我创建了一个包装器DLL。从那个包装器DLL,我试图连接第三方DLL。包装器DLL头文件(Sample.h)
extern "C" {
int __declspec(dllexport) Double(int x);
}
包装dll的cpp文件
typedef int (__cdecl *MYPROC)(int);
int func(int x)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
int result;
printf("inside the function");
// Get a handle to the DLL module.
hinstLib = LoadLibrary(TEXT("example_dll.dll"));
// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "Double");
// If the function address is valid, call the function.
if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
result = ProcAdd(x);
printf("Result: %d", result);
} else {
printf("function not found");
}
// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
}
// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
printf("Message printed from executable\n");
return result;
}
使用C程序(由g ++编译)我可以连接dll并获取数据。
但是从Java程序(使用JNA),我可以连接第一个dll,但第一个dll无法与第二个dll连接。
有人可以请教我如何解决这个问题吗?如果还有其他方法可以修复它吗?