Java 和 JNI 全局变量
Java and JNI global variables
我需要帮助,因为我不知道该怎么办。我是 JNI 的新手。
我正在开发一个Android应用程序,它必须使用特定协议(OpenIGTLink(。
为了使用这个协议,我使用了一个C库。问题是我需要定义一个全局变量来存储连接。您可以在下一个示例中看到:
igtl::ClientSocket::Pointer socket;
Java_es_iac_iactec_infraredsend_Comunicacion_OpenIGTLink_connect(
JNIEnv *env,
jobject mjobject,
jstring host,
jint port) {
socket = igtl::ClientSocket::New();
const char *chost = env->GetStringUTFChars(host, 0);
int r = socket->ConnectToServer(chost, port);
if (r != 0) {
return (jstring) "Cannot connect to the server.";
}
return (jstring) "ok";
}
在我想做的其他方法中:
Java_es_iac_iactec_infraredsend_Comunicacion_OpenIGTLink_send() {
igtl::ImageMessage::Pointer imgMsg = igtl::ImageMessage::New();
imgMsg->SetDimensions(size);
imgMsg->SetSpacing(spacing);
imgMsg->SetScalarType(scalarType);
imgMsg->SetDeviceName("ImagerClient");
imgMsg->SetSubVolume(svsize, svoffset);
imgMsg->AllocateScalars();
imgMsg->Pack();
socket->Send(imgMsg->GetPackPointer(), imgMsg->GetPackSize());
}
我不知道我是否必须声明一个 java 全局变量来存储 de socket 对象并从 JNI 访问它,或者是否可以在 cpp 文件中定义像全局变量一样的套接字。
谢谢大家,对不起我的英语。
也许,这不是最好的方法,但我们正在这样做。 我们将一个从 JNI 到 Java 的指针作为 jlong 返回,并将其传递给每个调用。它的工作方式类似于方法中对象的自指针。在您的情况下,它会以某种方式看起来像这样
jlong Java_es_iac_iactec_infraredsend_Comunicacion_OpenIGTLink_connect(
JNIEnv *env,
jobject mjobject,
jstring host,
jint port) {
/*some code*/
return reinterpret_cast<jlong>(socket);
}
然后
Java_es_iac_iactec_infraredsend_Comunicacion_OpenIGTLink_send(jlong pointer) {
/*some code*/
igtl::ClientSocket::Pointer socket = reinterpret_cast<igtl::ClientSocket::Pointer>(pointer)
socket -> Send(imgMsg->GetPackPointer(), imgMsg->GetPackSize());
}
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- 为什么我的数组值与此处的全局变量不匹配?
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++线程不检测全局变量更改
- Java 和 JNI 全局变量
- JNI中如何处理全局变量