Сопоставление JNA LPCSTR на платформе Windows

Я работаю над вызовом одной DLL API для C/C++ с JNA. API-интерфейс функции в DLL — это короткий DKT_init (имя LPCSTR). Я сделал соответствующий java-метод общедоступным коротким DKT_init (имя строки); Но когда я его вызываю, API DLL возвращает ошибку параметра. Интересно, как сопоставить LPCSTR в JNA? Поскольку LPCSTR - это cons char *, а String - это char *.


person Aolphin    schedule 17.11.2010    source источник


Ответы (2)


Строка является подходящим сопоставлением для LPCSTR. JNA преобразует измененные символы UTF16 в буфер байтов с нулевым завершением, используя кодировку платформы по умолчанию.

Вместо этого вы можете попробовать передать явный массив байтов (используя предложенное выше сопоставление альтернативного метода), что устранит потенциальную проблему с неправильной кодировкой, например.

byte[] arg = { (byte)'f', (byte)'o', (byte)'o', (byte)0 };

Вы можете изменить используемую кодировку, установив системное свойство «jna.encoding».

Вы также должны исключить возможность того, что "LPCSTR" на самом деле является неправильным типом; если функция ожидает буфер, в который она может записывать, String не будет работать, а если на самом деле это LPTCSTR и вы используете UNICODE, то вместо этого вам нужно передать WString.

person technomage    schedule 11.12.2011

Вы пытались сопоставить его с массивом байтов, например:

short DKT_INIT(byte [] nameAsByteArray);
//now you should be able to obtain it like this:
System.out.println(new String(nameAsByteArray).trim());
person Nikola Yovchev    schedule 18.11.2010