【发布时间】:2012-12-02 17:39:47
【问题描述】:
本地是指用 C++ 或 C 编写的
我正在开发一种基于 Java 的编程语言,因为它有一个 VM 和一个字节码编译器语言。
实现语言的特性,例如for 循环、变量、算术等等,对我来说不是问题;但是,像 Java 这样执行本机函数就可以了。
我需要本机函数,以便用我的语言编写的程序可以创建窗口、与硬件和操作系统交互,以及做任何不简单的数学运算。
我听说过JNI,它确实是我想要的东西,但是,我不知道如何实现这样的东西。
由于我的 VM 是用 C++ 实现的,我知道我可以在编译时拥有我的本机函数的 #include hpp 文件,然后它可以动态加载 dll 或 so 的文件,但是,这似乎并不是一个好的解决方案,因为每次您希望它能够执行另一个本机函数时都必须重新编译 VM。
问题归结为:C++ 程序(VM)如何动态地(在运行时,按照字节码的指示,更准确地说)加载带有 C++ 函数的库,然后在没有预先声明的情况下执行这些函数在某个头文件中?
【问题讨论】:
-
能否提供一些您想要的代码示例?
-
在 Windows 上,您使用 LoadLibrary() 和 GetProcAddress()。 Linux 具有不同名称的等效功能。这些并不能帮助您了解参数和返回值的数量和类型。
-
@BhavikAmbani 当然,我几个小时后回家。
-
@brianbeuning - 我确实知道返回类型和参数的类型,因为该函数是用我的语言创建的,它具有 C/C++ 类型的等价物。是否可以在运行时声明一个函数?
标签: java c++ java-native-interface shared-libraries