Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将第三方dll链接到我的dll_Java_C++_C_Dll_Jna - Fatal编程技术网

Java 将第三方dll链接到我的dll

Java 将第三方dll链接到我的dll,java,c++,c,dll,jna,Java,C++,C,Dll,Jna,我正试图编写一些java代码来访问第三方dll中的方法。我曾使用JNA尝试直接映射到它(我可以在不使用结构作为参数的情况下调用函数),但在函数调用后尝试访问结构的字段时遇到了麻烦(这些字段没有更新)因此,我勇敢的新方法是尝试创建自己的dll,它从java代码中获取primative变量类型,然后将它们放入适当的结构中,传递给第三方dll 我有C++代码,它与第三方DLL链接良好,但是我的问题是< /强>我如何让java代码与C++代码一起工作?将C++代码变成DLL是最容易的吗?如果是这样,我该

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

<>我有C++代码,它与第三方DLL链接良好,但是<强>我的问题是< /强>我如何让java代码与C++代码一起工作?将C++代码变成DLL是最容易的吗?如果是这样,我该怎么做?(因此,将此代码本身转换为dll。我使用visual studio 2012和eclipse juno作为我的IDE)

此处是C++代码(.cpp)


尝试以下类似于此的JNI教程:

首先,遵循教程获取java方法,这些方法可以调用C++方法。


然后,修改C++方法,类似于上面的代码,调用第三方DLL。< /P>将其转换成DLL并使用JNI。
#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;

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