我可以使用JNI在Java代码中引用C++对象吗? - java

我在任何地方都没有看到(或者也许我很简单,没有看到它),但是有没有办法使用JNI返回c / c ++对象并在Java中使用该对象?

例如(非常简单):

class simpleClass{
...
private:
int intVar;
public:
int getIntVar();
void setIntVar(int someNum);
...
}

在我的Java代码中,我将如何做类似的事情:

...
simpleClass sc = new simpleClass();
sc.setIntVar(9);
System.out.println(sc.getIntVar());
...

我意识到这是一个非常简单的示例,但是我只是在寻找概念-我想到的C++类非常大,并且希望避免创建大量包装方法...

如果不可能的话,只是希望节省几天的代码大声笑

参考方案

不,你不能。 C++和Java ABI完全不同-例如,c ++没有定义一个。确实,c ++具有许多无法完全映射到Java的功能,但这根本无法工作。您如何期望Java处理c ++模板?指向基元的指针?不是指针的对象?

现在您可以做的是使用SWIG为您生成正确的包装器方法-这实际上将起作用,并且工作量不会比您计划的要多:)

在Java中,执行“ ++++++++”表达式,编译器未报告任何错误并且可以正确执行? - java

我用eclipse编写了这段代码,用war写过,结果为3d。public static void main(String[] args) { double a = 5d + + + + + +-+3d; System.out.println(a); } 参考方案 您的表情可以改写为(5d) + (+ + + + +-+3d) 其中第一个+是应用于两个操作数的…

Java值加变量++ - java

考虑以下代码int val1 = 3; val1++; int val2 = val1++; System.out.println(val1); System.out.println(val2); Val1值= 5;Val2值= 4;为什么Val1的值是“ 5”?据我了解,应该为4,因为:在第1行,它的赋值为3,在第2行,通过val1 ++加上1,结果val…

为什么C++中的void方法可以返回void值,而在其他语言中却不能呢? - java

该程序可以用C ++编译并运行,但不能使用多种不同的语言,例如Java和C#。#include <iostream> using namespace std; void foo2() { cout << "foo 2.\n"; } void foo() { return foo2(); } int main() {…

如何在C++应用程序中访问Java方法 - java

只是一个简单的问题:是否可以从c / c ++调用Java函数? 参考方案 是的,可以,但是有点麻烦,并且可以以反射/非类型安全的方式工作(示例使用的C++ API比C版本更清洁)。在这种情况下,它将从C代码中创建Java VM的实例。如果首先从Java调用您的本机调用,则无需构造VM实例#include<jni.h> #include<s…

Hibernate通过非主键获取实体并更新它+ Spring MVC - java

当我使用其ID检索对象并更改其属性并更新它时,一切正常,但是当我使用其名称+版本获取对象并更新它们时,所有更改都不会保存在数据库中。您能不能让别人让我知道是什么问题?//通过id获取public PdfDocument get(Long id) { return (PdfDocument) session().get(PdfDocument.class, i…