我有一个用C++编写的大型程序,需要使用特定的Java库。理想情况下,我希望创建一个等效的C++库来包装现有的Java代码。因此,我一直在研究JNI调用API。
由于我不是一个非常有经验的程序员,而且我对JNI和多语言编程也缺乏经验,我非常感谢一些关于如何解决这个问题的一般提示/提示/建议。
我特别想知道的事情:
非常感谢!
发布于 2018-10-15 06:06:32
我以前也这样做过,但它不适合胆小的人,特别是如果你的两种语言之间的接口很难的话。在这种情况下,调试也是一件痛苦的事情。
要回答你的观点:
add(int,int)
这样的小函数比在C++中调用要昂贵得多。另一种选择(取决于您的库和用例,可能是可能的,也可能是不可能的)是在您的库周围编写某种包装服务,实际上是用Java编写。然后通过JSON-HTTP或一些消息传递系统向它发送请求。
另一种更好的选择是重写库在C++中所做的任何事情。
发布于 2019-03-14 02:32:14
您可以使用scapix::link::java Java库为任何C++代码生成C++头文件,然后从C++轻松访问这些Java代码。这是一个example
#include <scapix/java_api/java/lang/System.h>
#include <scapix/java_api/java/util/Locale.h>
#include <scapix/java_api/java/text/DateFormatSymbols.h>
using namespace scapix::link::java;
using namespace scapix::java_api;
void test1()
{
// C++ objects are automatically converted to and from corresponding Java types.
// This works for any type supported by scapix::link::java::convert() interface,
// which supports many STL types and can be extended for your own types.
std::string version = java::lang::System::getProperty("java.version");
std::vector<std::string> languages = java::util::Locale::getISOLanguages();
std::vector<std::vector<std::string>> zone_strings = java::text::DateFormatSymbols::getInstance()->getZoneStrings();
std::map<std::string, std::string> properties = java::lang::System::getProperties();
}
https://stackoverflow.com/questions/52807336
复制相似问题