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

 2023-01-21    241  

问题描述

我一直在JNI中通过@tulskiy的建议在JNI中存储C Pointers 通过jni在C和Java之间传递指针

诀窍是将指针施加为jlong​​.所以从c我有return (jlong) ptr;

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

我要返回一个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(但是所有” Sane”架构/编译器都使用,则是不确定的行为两者的补充算术)

其他推荐答案

尝试使用intptr_t铸造(无论平台容量如何,存储一个指针).

以上所述是小编给大家介绍的通过JNI传递C和Java之间的指针,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26208.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。