【问题标题】:JNA passing pointer ByReferenceJNA 传递指针 ByReference
【发布时间】:2013-07-17 09:33:13
【问题描述】:

我正在使用 JNA 从 DLL 调用一个函数,它需要一个无符号 *short 输入参数

unsigned void my_function(unsigned long handle, unsigned short * serial);

我尝试将串行作为ShortByReference 传递

my_function(long handle, ShortByReference serial);

当我使用它时,my_function 完成了工作,但没有检索到序列号(它保持在其初始化值)。

我也试过了

my_function(long handle, short[] serial);

但它的作用是一样的。

我怎样才能正确地做到这一点?

谢谢,Arn0。

【问题讨论】:

  • 您确定您的本机代码实际上正在更新该值吗?
  • 确实,我已经将此库与其他编程语言(VBA,以及 MATLAB)一起使用,它确实返回了正确的值。为了指定我的问题,该函数获取句柄值,做一些工作,然后应该填写串行指向的值。
  • 确保您的handle 参数使用NativeLong(或Windows 上的int)并且您的调用约定是正确的。
  • 我也很确定。该库还有其他功能可以处理,并且这些功能工作正常。我看到的唯一区别是它需要一个指针输入参数。我想知道这个库是否有问题,但它只有在与 java 一起使用时才会卡住。
  • 您的问题将 Java long 用于 unsigned long,这是不正确的(64 位与不确定的类型大小)。

标签: pointers pass-by-reference jna


【解决方案1】:

使用NativeLong(不是long)代表原生unsigned long

【讨论】:

    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多