Я пытаюсь написать некоторый код Java, который будет обращаться к методам в сторонних DLL. Я использовал JNA, чтобы попытаться отобразить его напрямую (я могу вызывать функции без структур в качестве параметров), но у меня возникают проблемы при попытке получить доступ к полям структур после вызова функции (они не были обновлены). Так, Мой смелый новый подход — попытаться создать свою собственную dll, которая берет исходные типы переменных из моего java-кода и, в свою очередь, помещает их в соответствующие структуры для передачи сторонним dll.
У меня есть код C ++, который хорошо связывается с третьей стороной DLL, но мой вопрос Как я могу получить мой Java-код для работы с этим кодом 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
Во-первых, следуйте инструкциям, чтобы получить методы Java, которые могут вызываться в методах C ++.
Затем измените методы C ++ так, чтобы они были похожи на приведенный выше код, вызывая стороннюю DLL.
Других решений пока нет …