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;
把它變成一個DLL並使用JNI。 –
這是http://stackoverflow.com/questions/17349037/jna-updatestructurebyreference-trouble和http://stackoverflow.com/questions/17353245/jna-dll-function-call-implementation的延續。 – technomage