【发布时间】:2016-09-01 09:45:53
【问题描述】:
我不确定这是否可行,但我需要将函数指针转换为 long 以便将 C 级代码映射回 java 代码。
【问题讨论】:
-
你能发布你的代码吗?
-
在附件中:J.2 未定义的行为
-
做一些最小的测试,转换为
long似乎不会按位改变指针。所以我会说作为jlong回传是安全的。 -
如果我错了,请纠正我,但这里的想法是,由于 Java 没有指针,您需要将 C 指针转换为
jlong(这只是一个long)能够将其传递回 Java 代码。您可以在那里存储它,或将其传递回另一个本机函数,在其中您可以将其转换回正确的函数类型,然后调用它。 -
@AlterMann 您没有正确引用标准。首先,附件 J 只是一个信息摘要,它不是规范性的,所以从那里引用一些东西并不能证明任何事情。 6.3.2.3/6 中的实际规范文本是这样的:“任何指针类型都可以转换为整数类型。除非前面指定,结果是实现定义的。如果结果不能以整数类型表示,则行为未定义。结果不必在任何整数类型的值范围内。”所以它不一定是未定义的行为。
标签: java c java-native-interface