JNA - передать char * для работы - PullRequest
0 голосов
/ 02 октября 2018

Я пишу небольшую программу на Java JNA.У меня есть пример кода на C ++:

HMODULE m_hInstDLL = LoadLibrary("CommLib.DLL");
typedef bool (FAR WINAPI* FARPROC_ADVISE_UNADVISE)(long, char*,char*);
FARPROC_ADVISE_UNADVISE m_procSymbolX_Advise = (FARPROC_ADVISE_UNADVISE)GetProcAddress(m_hInstDLL, "SymbolX_Advise");

С помощью этого примера я знаю, что в Commlib.dll есть функция:

SymbolX_Advise(long, char*, char*)

Где это обработчик для моегоокно (HWND) и указатели на массив символов.Как передать в JNA указатель на массив символов?Я написал что-то вроде этого на Java с помощью JNA:

boolean SymbolX_Advise(int handle, Pointer plc, Pointer tagName);
instance = (CommLib) Native.loadLibrary("CommLib", CommLib.class);
Pointer ptr1 = new Memory(plc.length()+1);
ptr1.setString(0, plc);
Pointer ptr2 = new Memory(tagName.length()+1);
ptr2.setString(0, tagName);
instance.SymbolX_Advise(windowHandler, ptr1, ptr2);

Правильный ли способ передать эти указатели?Потому что теперь это не работает для меня.

1 Ответ

0 голосов
/ 02 октября 2018

Я не уверен, поможет ли это или нет, но я столкнулся с очень похожей ситуацией несколько месяцев назад.У меня была функция C ++ с JNA, которая принимала строку.Она не принимала строку в качестве аргумента из-за разницы между кодировками в C ++ и Java, и я все равно предполагаю, что это так.Я передал его как указатель на массив символов в C ++.У меня нет своего кода при себе, но я думаю, что если вы определите его как строку в Java, а затем передадите, это сработает.Я знаю, что не использовал этот синтаксис и не использовал указатель для его передачи.

...