代码之家  ›  专栏  ›  技术社区  ›  Kutti

JNA-将char*传递给函数

  •  0
  • Kutti  · 技术社区  · 6 年前

    我正在用javajna编写一个小程序。我有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");
    

    在这个例子的帮助下,我知道通讯库.dll有一个功能:

    SymbolX_Advise(long, char*, char*)
    

    其中long是我的窗口(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 回复  |  直到 6 年前
        1
  •  0
  •   Teneala Spencer    6 年前

    我不确定这是否有用,但几个月前我也遇到过类似的情况。我有一个C++函数,它包含了一个字符串。它没有把字符串作为一个参数,因为C++和java中的编码之间的差异,我还是假设了。我把它作为指针指向C++中的字符数组。我没有我的代码,但我认为如果你在Java中将它定义为一个字符串,然后通过它就可以了。我知道我没有使用那个语法,也没有使用指针来传递它。