Java — реализация вызова функции DLL JNA

Я пытался и потерпел неудачу! Сначала я покажу вам код C ++, который я пытаюсь имитировать, а затем JNA-код JNA, который я придумал (половина его работает).

Код C ++

typedef struct
{
int DeviceType;
int Handle;
int NumberOfClients;
int SerialNumber;
int MaxAllowedClients;
} NeoDevice;

typedef int  (__stdcall *FINDNEODEVICES)(unsigned long DeviceTypes, NeoDevice *pNeoDevice, int *pNumDevices);

extern FINDNEODEVICES icsneoFindNeoDevices;

bool LoadDLLAPI(HINSTANCE &hAPIDLL){
icsneoFindNeoDevices =    (FINDNEODEVICES) GetProcAddress(hAPIDLL, "icsneoFindNeoDevices");
}

Java-код

структура реализации …

public class NeoDevice extends Structure {

public volatile int DeviceType;
public volatile int Handle;
public volatile int NumberOfClients;
public volatile int SerialNumber;
public volatile int MaxAllowedClients;

public NeoDevice() {
super();
}

protected List<? > getFieldOrder() {
return Arrays.asList("DeviceType", "Handle", "NumberOfClients", "SerialNumber", "MaxAllowedClients");
}

public NeoDevice(int DeviceType, int Handle, int NumberOfClients, int SerialNumber, int MaxAllowedClients) {
super();
this.DeviceType = DeviceType;
this.Handle = Handle;
this.NumberOfClients = NumberOfClients;
this.SerialNumber = SerialNumber;
this.MaxAllowedClients = MaxAllowedClients;
}

protected ByReference newByReference() { return new ByReference(); }
protected ByValue newByValue() { return new ByValue(); }
protected NeoDevice newInstance() { return new NeoDevice(); }

public static class ByReference extends NeoDevice implements Structure.ByReference {

};
public static class ByValue extends NeoDevice implements Structure.ByValue {

};
}

код основного класса …

System.setProperty("jna.library.path", "C:\\WINDOWS\\system32");
icsneo40 n40 = icsneo40.INSTANCE;
NeoDevice.ByReference myDeviceByRef = new NeoDevice.ByReference();
int icsneoGetDLLVersion = n40.icsneoGetDLLVersion();
int iResult = n40.icsneoFindNeoDevices(65535, myDeviceByRef.getPointer(), NumDevices);
myDeviceByRef.read();

функция без параметров работает нормально и возвращает целое число, которое она должна. другой возвращает «1», который должен, но проблема в Он также должен записывать в поля структуры, я передаю его, но когда я смотрю на его поля, все они по-прежнему равны нулю.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]