JNA-将char *传递给函数

时间:2018-10-02 12:48:20

标签: java c++ dll jna

我正在用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)的处理程序,以及指向char数组的指针。 如何将JNA指针传递给char数组? 我在JNA的帮助下用Java编写了这样的内容:

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 :(得分:0)

我不确定这是否有帮助,但是几个月前我遇到了非常相似的情况。我的JNA具有C ++函数,该函数接受了字符串。由于C ++和Java中的编码之间存在差异,因此没有将字符串作为参数,所以我还是以为是这样。我将其作为指向C ++中字符数组的指针传递。我没有我的代码,但是我认为,如果您在Java中将其定义为字符串然后传递,则可以使用。我知道我没有使用该语法,也没有使用指针来传递它。