2013-07-02 58 views
0

我正在嘗試編寫一些將訪問第三方dll中的方法的java代碼。我已經使用JNA嘗試直接映射到它(我可以調用不帶結構的函數作爲參數),但是在函數調用之後嘗試訪問結構的字段時(他們沒有更新),我遇到了麻煩。 所以,我的勇敢的新方法是嘗試使我自己的dll,它從我的java代碼採取主要變量類型,並反過來將它們放入適當的結構傳遞給第三方DLL。將第三方DLL鏈接到我的dll

我有C++代碼鏈接罰款與第三方dll,但我的問題是我如何讓我的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; 
+0

把它變成一個DLL並使用JNI。 –

+0

這是http://stackoverflow.com/questions/17349037/jna-updatestructurebyreference-trouble和http://stackoverflow.com/questions/17353245/jna-dll-function-call-implementation的延續。 – technomage

回答