C JNI帮助处理复杂的代码

时间:2011-02-09 15:32:09

标签: java c linux java-native-interface

dev env:Ubuntu 10.10(32位),Eclipse,OpenJDK

我目前拥有用C编写的可执行文件的代码。我需要修改它以将其转换为.so库并从Java代码访问其函数。

目前,C代码包含3个头文件和3个源文件(.c)。我只需要调用main函数并从java传递两个字符串。所有其余的函数都是从main()中调用的。不幸的是,其他一个函数将结果打印到命令行。如何实现JNI传递两个字符串并返回此特定结果?

我在网上找到了一些例子,但发现它们太简单了。 另外,我找不到jni.h标头供使用。

我会在C中使用JNIEXPORT int JNICALL Java_ppldtct_main(JNIEnv*,jobject,jstring,jstring)代替int main(int argc,char** argv)吗?

非常感谢所有帮助。

谢谢

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您正尝试对现有代码进行微小更改。

如果是这种情况,您可以尝试用管道覆盖文件描述符1(stdout)并以这种方式获取程序的输出。

答案 1 :(得分:0)

您还可以从本机C代码回调Java代码。

您可以通过调用JNI提供的函数GetMethodID()来查找Java方法,并通过以下方式调用此类函数: CallVoidMethod(),具体取决于返回类型。

可以使用NewStringUTF()的NewString()在C中创建Java字符串。