【发布时间】:2023-03-06 13:08:01
【问题描述】:
我正在用 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);
传递这个指针的正确方法是什么?因为现在它对我不起作用。
【问题讨论】:
-
另外,我不熟悉 Java 整数类型,但 HANDLE 在 Win 64 位上是 8 个字节长。
-
您为空终止符添加了 +1,但您是否确保在设置字符串时清除了
Memory?