通过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_t
到jlong
和背部是保证提供的工作jlong
是够大(这你隐含假设它是无论如何)。 - 从投放
uinttptr_t
到jlong
和背部避免符号扩展,但未定义的行为,如果uintptr_t
是太大,不适合在jlong
(但所有的“健全”的架构/编译器只需使用两个互补算术)
以上是 通过JNI在C和Java之间传递指针 的全部内容, 来源链接: utcz.com/qa/419465.html