JNA картографирование LPCSTR на платформе Windows - PullRequest
1 голос
/ 17 ноября 2010

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

Ответы [ 2 ]

1 голос
/ 11 декабря 2011

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

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

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

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

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

0 голосов
/ 18 ноября 2010

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

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