2013-07-02 4 views
0

제 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 튜토리얼 다음
+0

DLL로 변환하고 JNI를 사용하십시오. –

+0

이것은 http://stackoverflow.com/questions/17349037/jna-updatestructurebyreference-trouble 및 http://stackoverflow.com/questions/17353245/jna-dll-function-call-implementation의 연속입니다. – technomage

답변