将第三方dll链接到MY dll

时间:2013-07-02 16:23:47

标签: java c++ c dll jna

我正在尝试编写一些将访问第三方dll中的方法的java代码。我已经使用JNA尝试直接映射到它(我可以调用没有结构的函数作为参数)但是在函数调用之后尝试访问结构的字段时遇到了麻烦(它们没有更新)。 所以,我勇敢的新方法是尝试创建自己的dll,它从我的java代码中获取主要变量类型,然后将它们放入适当的结构中以传递给第三方dll。

我的c ++代码可以很好地与第三方dll链接,但是我的问题是我如何让我的java代码使用这个c ++代码?是否最容易将c ++代码转换为dll,如果是这样,我该怎么做? (所以将此代码转换为dll本身。我使用visual studio 2012和eclipse juno作为我的IDE)

这里的C ++代码(.cpp)

#include <stdio.h>
#include <Windows.h>
#include "Header.h"



FINDNEODEVICES icsneoFindNeoDevices;
GETDLLVERSION icsneoGetDLLVersion;

//extern int __declspec(dllimport) add(int a, int b);
bool LoadLibDLL(HINSTANCE &hAPIDLL){
    hAPIDLL = LoadLibrary(L"icsneo40.dll");
    icsneoGetDLLVersion = (GETDLLVERSION) GetProcAddress(hAPIDLL,                   "icsneoGetDLLVersion");
    icsneoFindNeoDevices =    (FINDNEODEVICES) GetProcAddress(hAPIDLL,              "icsneoFindNeoDevices");
    return true;
}

int main() {

    HINSTANCE icsneo40;
    bool success = LoadLibDLL(icsneo40);
    printf("Version #: %d\n", icsneoGetDLLVersion());
    int aray [5] = {600, 600, 600, 100, 600};
    int *p = aray;
    int num = 10;
    int lResult = icsneoFindNeoDevices(65545,p,&num);
    printf("Serial NUmber: %d\n", aray[3]);
    getchar();
    return 0;

 }

头(.h)

typedef int  (__stdcall *FINDNEODEVICES)(unsigned long DeviceTypes, int* myint, int *pNumDevices);
typedef int (__stdcall *GETDLLVERSION)(void);
extern FINDNEODEVICES icsneoFindNeoDevices;
extern GETDLLVERSION icsneoGetDLLVersion;

1 个答案:

答案 0 :(得分:0)

尝试按照以下JNI教程进行操作:

http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

首先,按照教程获取可以调用C ++方法的Java方法。 然后,将C ++方法修改为与上面的代码类似,调用第三方DLL。