通过JNI在C和Java之间传递指针

我一直遵循本文中@tulskiy的建议,通过JNI将Java中的c指针存储在Java中通过JNI在C和Java之间传递指针

诀窍是将指针转换为jlong​​。所以从c我有return (jlong) ptr;

我返回一个jlong​​(始终为64位),因为我希望我的代码在64位和32位系统上都能工作。64位计算机上64位指针在内存中的大小为64,而在32位计算机上,内存中指针的大小为32位。

问题是在32位计算机上,我收到一个编译器警告,提示“从不同大小的指针转换为整数”。如果我有警告,则该警告消失。 return (jlong)

(int32_t) ptr;但是,此代码对64位计算机不好。

我想在没有警告的情况下编译我的代码,以便在有合法警告的情况下看到它。有人有主意吗?

谢谢,本

回答:

C中有各种方便的整数类型。您想要的一种可能是intptr_t或uintptr_t:

return (jlong)(intptr_t) ptr;

区别?

  • 从铸造intptr_tjlong和背部是保证提供的工作jlong是够大(这你隐含假设它是无论如何)。
  • 从投放uinttptr_tjlong和背部避免符号扩展,但未定义的行为,如果uintptr_t是太大,不适合在jlong(但所有的“健全”的架构/编译器只需使用两个互补算术)

以上是 通过JNI在C和Java之间传递指针 的全部内容, 来源链接: utcz.com/qa/419465.html

回到顶部