Я пытался и потерпел неудачу! Сначала я покажу вам код 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», который должен, но проблема в Он также должен записывать в поля структуры, я передаю его, но когда я смотрю на его поля, все они по-прежнему равны нулю.
Задача ещё не решена.
Других решений пока нет …