使用JNA连接第三方C ++头文件

时间:2016-07-06 03:54:56

标签: java c++ dll java-native-interface jna

我有一个带有标题的第三方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连接。

有人可以请教我如何解决这个问题吗?如果还有其他方法可以修复它吗?

0 个答案:

没有答案