【问题标题】:JNA - pass char* to functionJNA - 将 char* 传递给函数
【发布时间】: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 整数类型,但 HANDLEWin 64 位上是 8 个字节长。
  • 您为空终止符添加了 +1,但您是否确保在设置字符串时清除了 Memory

标签: java c++ dll jna


【解决方案1】:

我不确定这是否会有所帮助,但几个月前我遇到了非常相似的情况。我有一个带有 JNA 的 C++ 函数,它接收一个字符串。由于 C++ 和 Java 中的编码不同,它没有将字符串作为参数,无论如何我都假设。我将它作为指向 C++ 中字符数组的指针传递。我没有我的代码,但我认为如果你将它定义为 Java 中的字符串然后传递它会起作用。我知道我没有使用那种语法,也没有使用指针来传递它。

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 2019-12-11
    • 2012-07-26
    • 2012-05-10
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多