我正在尝试编写一些将访问第三方 dll 中的方法的 java 代码。我已经使用 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;