【发布时间】:2017-04-19 14:15:31
【问题描述】:
这是我在 StackOverflow 上的第一篇文章。我正在做一个项目,我需要你在 JNI 中的帮助。我被困在那里......我最近一直在阅读和尝试它,但仍然不知道如何让它工作。
我在 C++ 中创建了一个静态库(伪代码如下所示):
// file: X.h
class X {
public:
X() {};
~X() {};
void fooX() { // do stuff };
void barX() { // do more stuff };
}
// file: X.cpp
#include "X.h";
// file: Y.h
#include "X.h"
class Y {
public:
Y() {x = new X()};
~Y() {};
fooY() { // do stuff };
barY() { // do more stuff };
private:
X x; // object of class X
}
// file: Y.cpp
#include "Y.h"
// file: Z.h
#include "Y.h"
class Z {
public:
Z(uint8_t, std::string, std::vector<uint8_t>);
~Z() {};
fooZ() { // do stuff };
barZ() { // do more stuff };
private:
Y y; // object of class Y
}
// file: Z.cpp
#include "Z.h"
Z::Z(uint8_t a, std::string b, std::vector<uint8_t> c)
{
/// do stuff and create an object of Y
Y y = new Y();
}
// file api.h
#include "Z.h"
void accessZ(uint8_t, std::string, std::vector<uint8_t>);
// file api.cpp
#include "api.h"
void accessZ(uint8_t a_uint,
std::string b_string,
std::vector<uint8_t> c_vector)
{
// create object of Z
Z z = new Z(a_uint, b_string, c_vector);
z->fooZ();
delete z;
z = NULL;
}
此外,我已将上述所有代码编译为 C++ 中的静态库 (libXYZ.a)(Windows 7 上使用 MinGW 的 Eclipse C++ CDT)。
现在,我想要的是能够从 Java 应用程序调用 API accessZ() C++ 函数! 换句话说,我已经用 C++ 实现了核心功能,我想用 Java 实现 GUI。因此,我需要从 Java GUI 访问 C++ 函数...
我该怎么做?我需要直接的答案,而不是模糊的答案...
非常感谢您的帮助。
非常感谢您的支持。
已编辑
我的项目如下:
MyLibrary
|
Makefile header/ source/ bin/ object/ lib/
X.h X.cpp X.o libXYZ.a
Y.h Y.cpp Y.o
Z.h Z.cpp Z.o
api.h api.cpp api.o
我所需要的只是能够使用 accessZ() 函数将一些参数从 Java 传递到 libXYZ。
新编辑:
public final class NativeClass {
{
System.loadLibrary("myLibrary");
}
public native void accessZ(char a_uint, String b_string, char[] c_vector);
public static final NativeClass getInstance() {
return INSTANCE;
}
private static final NativeClass INSTANCE = new NativeClass();
};
【问题讨论】:
-
您查看过现有的任何 jni 教程吗?你为什么希望我们为你明确地写下东西……以前写过无数次?
-
@GhostCat :我当然检查过 JNI 教程。但是,它们都针对用 C++ 编写的特定函数,而不是库中的函数。
-
在这些教程中......那里使用的 c++ 函数......没有存储在某个库或 dll 中——它们只是生活在真空中?!
-
非常感谢您的 cmets 和时间...我对 JNI 完全陌生。因此,如果您知道/有一些有用的链接/教程(不像 HelloWorld JNI 示例)来解决我的问题,请将其放在那里;可能,我错过了一些搜索结果...否则,我没有时间进行无用的讨论...
-
您必须向我们展示您迄今为止尝试过的内容,即调用 C++ 函数的 Java 代码。作为一个建议,最好从一个非常简单的函数开始你的实验,比如
int getInt() { return 123; }。否则,不清楚您期望我们提供什么样的答案,不会复制大量现有的免费在线教程或关于 JNI 的教科书章节。请记住,Stack Overflow 是关于特定问题的。你也不应该听起来那么苛刻。我的意思是,“我需要直接的答案”,拜托……这不像是你付钱给我们。
标签: java c++ eclipse c++11 java-native-interface