我应该如何在 jna 中将 return unsigned int 按值从 Java 传递到 C/C++

How should I pass and return unsigned int by value from Java to C/C++ in jna

我的 C++ 函数

extern "C" {
   DECLSPEC unsigned int STDCALL doNumberThing(unsigned int some_number);
}

我的Java界面

package com.myplace.nativeapi;

import com.sun.jna.Library;
import com.sun.jna.Memory;
import com.sun.jna.Pointer;

interface NativeAPI extends Library {
    int doNumberThing(int some_number);
}

显然,在处理仅对一种或另一种不匹配类型(int 与 unsigned int)有效的值时会出现问题;解决这个问题的推荐方法是什么? One answer elsewhere 推荐 "IntByReference",但除非我误解了,否则他们谈论的是 long*,而不是按值传递的实际 unsigned int。

(这是精简的示例代码,如果有语法错误,请在评论中告诉我,我会更新问题)

JNA provides the IntegerType class,可用于表示某个特定大小的无符号整数。您必须使用 Java long 来保存原始形式的原生 unsigned int,因为它的值可能超出 Java int 的范围,但一般来说,您可以绕过 IntegerType 对象,只在需要时拉出原始值。

public class UnsignedInt extends IntegerType {
    public UnsignedInt() {
         super(4, true);
    }
}