제 3 자 dll의 메소드에 액세스 할 Java 코드를 작성하려고합니다. JNA를 사용하여 직접 매핑했는데 (구조체가없는 구조체를 params로 호출 할 수 있음) 함수 호출 후에 struct의 필드에 액세스하려고 할 때 문제가 발생합니다 (업데이트되지 않았습니다). 그래서, 내 용감한 새로운 접근 방식은 내 자바 코드에서 기본 변수 형식을 취한 다음 적절한 구조로 제 3 자 dll에 전달되도록 내 자신의 dll을 만들려고 시도하는 것입니다.타사 DLL을 MY DLL에 연결하십시오.
제 3 자 dll과 잘 연결되는 C++ 코드가 있지만 내 질문은이 C++ 코드로 작업하려면 어떻게해야합니까? 그것은 C++ 코드를 dll로 만드는 것이 가장 쉬운가요? 그렇다면 어떻게해야합니까? (그래서 DLL 자체에이 코드를 켭니다. 나는 비주얼 스튜디오 2012를 사용하여 내 IDE의 같은 주노 일식입니다)
C++ 여기에 코드 (통화 당)
#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 튜토리얼 다음
DLL로 변환하고 JNI를 사용하십시오. –
이것은 http://stackoverflow.com/questions/17349037/jna-updatestructurebyreference-trouble 및 http://stackoverflow.com/questions/17353245/jna-dll-function-call-implementation의 연속입니다. – technomage