Tag: java

JNA数据返回到预期的第16个字节

我期待在内存中的数据是 [8 Bytes (long)][20 Bytes (byte[20])][8 Bytes (long)][20 Bytes (byte[20])][8 Bytes(long)][20 Bytes (byte[20])] 数据结构似乎是正确的。 问题是结构中的数据是错误的。 预期数据的第一个字节实际上是第9个字节。 前8个预期字节根本不显示(原生长) 我怀疑问题在于我设置Java对象的方式,但我个人并没有看到这个问题。 C联盟: union _My_SN { struct { unsigned long sequence; unsigned char variant; unsigned char version; unsigned short pid; } field; struct { unsigned long long ser; unsigned char serName [20]; //16 Characters followed by 4 \0 unsigned […]

将jobject与值相关联

jclass object = (*env)->FindClass(env,”java/lang/Integer”) // C Code 有什么办法可以将整数值与object相关联吗? 我希望object包含/指向整数。

Java中的链接错误

我收到以下错误: Exception in thread “main” java.lang.UnsatisfiedLinkError: model.JNIResultSet.getSpieler()[Lmodel/Spieler; at model.JNIResultSet.getSpieler(Native Method) at model.JNIResultSet.main(JNIResultSet.java:18) 我的java类看起来像这样: package model; public class Spieler { private String vorname; private String nachname; private int trikotnummer; public Spieler(String vorname, String nachname, int trikotnummer) { this.vorname = vorname; this.nachname = nachname; this.trikotnummer = trikotnummer; } } 和 package model; public class JNIResultSet { public […]

Java JNI:将多字节字符从java传递给c

我再一次搞乱java natve界面,我遇到了另一个有趣的问题。 我正在通过jni向c发送文件路径,然后进行一些I / O. 所以我遇到的最常见的问题是‘äåö’ 。 这是一个具有完全相同问题的程序的简短演示: Java的: public class java { private static native void printBytes(String text); static{ System.loadLibrary(“dll”); } public static void main(String[] args){ printBytes(“C:/Users/ä-å-ö/Documents/Bla.txt”); } } C: #include “java.h” #include JNIEXPORT void JNICALL Java_java_printBytes(JNIEnv *env, jclass class, jstring text){ const jbyte* text_input = (*env)->GetStringUTFChars(env, text, 0); jsize size = (*env)->GetStringUTFLength(env, text); […]

我有两个非常相似的C函数从python和Java调用。 如何将2个库合并为1个可以从两种语言调用的库?

基本上我有2个C函数“encrypt”的实现,我使用ctypes和java使用JNI从python调用。 我被告知要使用两个用于java和python的动态库,并将它们组合成一个可以从两者中调用的静态库。 为了澄清,这里是使用JNI的Java的C函数实现: #include “jniTest.h” #include JNIEXPORT void JNICALL Java_jniTest_passBytes (JNIEnv *env, jclass cls, jbyteArray array) { unsigned char *buffer = (*env)->GetByteArrayElements(env, array, NULL); jsize size = (*env)->GetArrayLength(env,array); for(int i=0; iReleaseByteArrayElements(env, array, buffer, 0); } 因此,该函数接受一个字节数组,并将每个字节递增1,然后返回新字节数组的每个元素。 这是java方面: class jniTest{ public static native void passBytes(byte[] bytes); static{ System.loadLibrary(“encrypter”); { public static void main(String[] args){ Tester tester […]

JNI本机代码上的内存泄漏

我有一段JNI本机代码。 当我们调用此本机方法+运行其他请求时,jvm将崩溃。 最有可能的是,这段JNI本机方法(c代码)中存在内存泄漏。 任何正文可以帮助检测下面代码中的内存泄漏? #include #include #include #include “fns_data.h” #include “fns_client.h” #include “sockRW.h” #include “/usr/local/include/jni.h” #include “JNIiSearchLib.h” #include “com_eds_wise_util_JNIiSearchLib.h” JNIEXPORT jstring JNICALL Java_com_eds_wise_util_JNIiSearchLib_jniFNSSearchClient ( JNIEnv *env, jobject obj, jstring jip_addr, jint jport_number, jstring jfield, jstring jquery_str, jint jhitnum) { HitIds *hit_list = NULL; hitListPktStruct *hitPkt = NULL; int hit_number = 0; int i = 0; […]

Java JNI错误java.lang.UnsatisfiedLinkError:xxxx()V

今天我和JNI度过了一段艰难的时光,基本上我想要做的是将OpenAlpr集成到我的Java项目中,我使用的是预编译的二进制文件,当我运行java_test.bat文件时,它可以很好地工作。 起初Java一直告诉我它无法找到openAlprJni然后我将dlls的路径添加到我的构建路径和系统路径,之后我开始体验openAlprJni.Alpr.initialize(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V根据文档意味着库本身不行,但是由于测试程序正在运行,它已经可以了,我已经查看了各种论坛,甚至还与OpenAlpr的作者OpenAlpr但是仍然不能解决这个问题,这里有谁有类似的问题帮我解决这个问题? 提前致谢。

swig从struct中的变量获取返回类型作为java中的字符串数组

对于一个小型Java项目,我需要与用C编写的现有代码进行交互,所以为了简单起见(不幸的是我不是C / C ++程序员……)我决定使用swig。 我遇到的第一个问题:返回NULL分隔字符串的C函数导致返回String的包装代码,只包含第一个值,由Flexo提供的3(!)可能解决方案解决: SWIG从String获取返回类型java中的字符串数组 在继续开发这个项目时,我遇到了第二个问题(类似?)模式让我感到困惑:headerfile包含一个结构“PROJECTDETAILS”,它反过来包含一个变量itemList(应该)包含一个NULL分隔的String。 用于itemList的swig生成的getter将第一个结果作为String返回,就像我原始链接问题中的GetProjects函数一样(包含第一个结果的String)我试图将Flexo提供的答案应用于此问题,但是我’无法“键入”itemList变量 C头文件中的函数指出: typedef struct _PROJECT { int version; unsigned char vM; unsigned char fM; } * PROJECT; typedef struct _PROJECTDETAILS { int infoType; union { char *itemList; /* Returns a NULL-delimited string */ char *projectName; } info; } PROJECTDETAILS; DllImport PROJECT OpenProject dsproto((int, char *)); DllImport int GetProjectDetails […]

JNIexception访问冲突

目前我正试图和JNI一起玩。 我的Java代码: public class test{ static{ System.loadLibrary(“wakeup64”); } public static native boolean setWakeupTime(Date date); public static void set(){ Date d = new Date(); setWakeupTime(d); } } C代码: #include #include “cpp_interface.h” #include JNIEXPORT void JNICALL Java_test_setWakeupTime (JNIEnv *env, jclass cl, jobject date){ printf(“test”); } int main(){ } 代码编译得很好但如果我运行我的java类我得到一个exception_access_violation: # # A fatal error has been detected […]

通过套接字从Java发送到C – 奇怪的结果

我有一个用Java编写的简单服务器,它只是将一个Integer发送到一个连接的客户端。 我有一个用C编写的客户端,它连接到服务器并打印出收到的Integer。 我的问题是结果各不相同。 大约一半时间执行客户端我得到正确的结果(234),但有时我得到8323072。 这是服务器: class TCPServer { public static void main(String args[]) throws Exception { ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Socket connectionSocket = welcomeSocket.accept(); System.out.println(“welcomeSocket.accept() called”); DataInputStream inFromClient = new DataInputStream(connectionSocket.getInputStream()); DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); outToClient.writeInt(234); } } } 这是客户: int main(int argc, char *argv[]) { if(argc != 4){ printUsage(); return; […]