2010-11-17 2 views
1

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

ответ

0

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

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

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

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

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

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

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

Смежные вопросы