gpt4 book ai didi

java - 将第三方 dll 链接到我的 dll

转载 作者:行者123 更新时间:2023-11-30 17:50:08 26 4
gpt4 key购买 nike

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

我有与第三方 dll 链接良好的 C++ 代码,但我的问题是我如何让我的 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;

最佳答案

尝试遵循这样的 JNI 教程:

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

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

关于java - 将第三方 dll 链接到我的 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17430776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com