gpt4 book ai didi

java - GCC 中的外部 "Java" block

转载 作者:IT老高 更新时间:2023-10-28 20:48:04 25 4
gpt4 key购买 nike

我发现了一个有趣的 feature在 C++ 的 GCC 文档中:

java_interface

This type attribute informs C++ that the class is a Java interface. It may only be applied to classes declared within an extern "Java" block. Calls to methods declared in this interface will be dispatched using GCJ's interface table mechanism, instead of regular virtual table dispatch.

据我了解,它看起来像这样:

extern "Java" {
class NativeClass __attribute__((java_interface)) {
//Implementation on native methods goes here.
}
}

有人知道这方面的细节吗?如何从 Java 中调用 NativeClass 的方法?也许有人在现实生活中尝试过?

最佳答案

GCJ 为 Java 提供了两个 native 接口(interface):JNI使用 C 和 CNI使用 C++。由于您引用的示例使用了一个类,因此它必须引用后者。 CNI documentation on interfaces仅描述如何从 C++ 代码访问 Java 中描述的接口(interface)。您的示例似乎以相反的方式工作:用 C++ 编写的类,可从 Java 访问并用作 Java 接口(interface)。

但是关于这个可用的细节非常少,所以试验和错误将是试验它的一种方法,而查看实际的 GCC 源代码将是另一种方法。如果您想查看 extern "Java" block 和 java_interface 属性的一个示例,请查看 java/lang/Readable.h .它包含 Java 接口(interface)的 C++ 表示 java.lang.Readable .正如该文件的第一行所述,它是机器生成的。因此,文档如此少的原因可能是因为您不应该自己编写这些东西。这只是GCJ如何实现CNI的一个细节。仔细观察上面的文件,他们似乎甚至违反了他们自己的文档,因为 Readable.h 具有 extern block 之外的属性,与片段相反你引用了。

关于java - GCC 中的外部 "Java" block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15167867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com