gpt4 book ai didi

java - 如何使用 GCJ 创建 Java String 数组?

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:17 25 4
gpt4 key购买 nike

我试图从 C++ 代码调用 Java 类 kissdb.dev.Run 的“public static void main(String[])”方法。我使用GCJ编译:

c++ -c run.cpp; gcj run.o kissdb.so -lstdc++ -o run.x

但是下面的代码无法编译。编译器说:

run.cpp: In function ‘int main(int, char**)’:
run.cpp:52:23: error: no match for ‘operator=’ in ‘*(args + ((unsigned int)(((unsigned int)i) * 8u))) = arg’

要做什么?我的 C++ 代码:

#include <gcj/cni.h>
#include <java/lang/System.h>
#include <java/io/PrintStream.h>
#include <java/lang/Throwable.h>

#include <iostream>
#include "pub.h"

java::lang::String* js(const char* s) {
return JvNewStringLatin1(s);
}

int main(int argc, char *argv[]) {
using namespace std; // For cout <<
using namespace java::lang; // For System::class, Throwable

try {
JvCreateJavaVM(NULL);
JvAttachCurrentThread(NULL, NULL);

cout << "* Hello from GCJ! argc: " << argc << endl;

JArray<String *> *args =
(JArray<String *> *) JvNewObjectArray(argc, &String::class$, NULL);
// From http://gcc.gnu.org/onlinedocs/gcj/Arrays.html#Arrays

for (int i = 0; i < argc; i++) {
String* arg = JvNewStringLatin1(argv[i]);
args[i] = arg; // <--- ERROR HERE
}

kissdb::dev::Run::main(args); // The Java main method I want to run.

JvDetachCurrentThread();
} catch (Throwable *t) {
System::out->println(js("Unhandled Java exception:"));
t->printStackTrace();
}
}

最佳答案

需要使用'elements'模板函数。

elements(args)[i] = arg;

请参阅手册中的“阵列”页面。

关于java - 如何使用 GCJ 创建 Java String 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16836497/

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