Tag: java

Cygwin编译错误有问题的框架:#C 使用JNI

我使用JNI创建了一个简单的hello world应用程序一切正常,即使我的64位的dll被创建但是当我运行应用程序时它显示以下错误: # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000180116d47, pid=2140, tid=0x0000000000001710 # # JRE version: Java(TM) SE Runtime Environment (8.0_131-b11) (build 1.8.0_131-b11) # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.131-b11 mixed mode windows-amd64 compressed oops) # Problematic frame: # C [cygwin1.dll+0xd6d47] # […]

Java JNA UCHAR和PUCHAR

我希望得到一个Java字符串’ WlanHostedNetworkSetSecondaryKey ‘和’ WlanHostedNetworkSetProperty ‘。 一个人想要一个带有CHAR []的结构中的结构,而第一个需要一个PUCHAR。 我尝试使用String,char [],byte []和Memory ,但是它们会继续产生相同的错误(错误参数或错误的配置文件为第一个)。 任何方式可能用JNA调试更多(可能不是:()?我也无法读取使用的characterencoding,除了它不是ANSI ..任何帮助都会很棒! * DWORD WINAPI WlanHostedNetworkSetSecondaryKey( __in HANDLE hClientHandle, __in DWORD dwKeyLength, __in PUCHAR pucKeyData, __in BOOL bIsPassPhrase, __in BOOL bPersistent, __out_opt PWLAN_HOSTED_NETWORK_REASON pFailReason, __reserved PVOID pvReserved * DWORD WINAPI WlanHostedNetworkSetProperty( __in HANDLE hClientHandle, __in WLAN_HOSTED_NETWORK_OPCODE OpCode, __in DWORD dwDataSize, __in PVOID pvData, __out_opt […]

Dijkstra有一堆。 放松后如何更新堆?

我正在尝试实现Dijkstra算法。 foreach distance d d = INFINITY d[source] = 0 create_heap_based_on_Distances(); while(true) bestedge = heap[0] remove_minimum_from_heap //it will be heap[0] foreach adjacency of bestedge if (weight + bestedge_distance < current_distance) { current_distance = weight + bestedge_distance // Now I have to update heap, how can I do that? } if (heap_empty) break 所以,在放松的过程中,我如何更新堆,以便它具有正确的顺序? 我在该步骤中没有该节点的堆索引。 这是否意味着我必须创建一个新的数组,如nodes[edge] […]

将char数组从java返回到C – JNI

我有一个Java对象存储库。 我的C程序在java中存储数据(以char数组的forms)。 现在我希望从我的商店中检索数据。 我找不到任何返回char数组的函数调用。 我怎样才能做到这一点?

不满意的链接错误:java.library.path中没有库文件

我有这样的目录结构 . –compile_c.sh –compile_java.sh –config.sh –execute_java.sh –run.sh –src –ccode –jnitest_SimpleJNITest.h –rtm_simple.c –jnitest –SimpleJNITest.java –lib –rtm_simple.so –classes –SimpleJNITest.class 当它具有在rtm_simple.c充实的native方法时,如何正确运行rtm_simple.c ? 目前,我已定义 config.sh targetDir=”classes” libDir=”lib” srcDir=”src” MainPackage=”jnitest” Main=”SimpleJNITest” ccodeDir=”ccode” cFileName=”rtm_simple” jdkDir=”/home/user/local/java/jdk1.7.0_65″ mkdir -p “$targetDir” mkdir -p “$libDir” 我正试图跑 run.sh #!/bin/bash source compile_java.sh javah -d “${srcDir}/${ccodeDir}” -cp “$targetDir” -jni “${MainPackage}.${Main}” source compile_c.sh source execute_java.sh 哪里 compile_java.sh #!/bin/bash source […]

将数据从C传递到Java

在C服务器和Java applet之间传递数据的最佳方法是什么? 目前,它是通过使用缓冲区并使用memcpy将字节复制到它来完成的,但是如果对象发生了变化,我必须查找它被发送到applet的每个实例并将其更改。 有没有更好的方法将对象传递给java? 你会怎么做? 编辑说明:它只是从C服务器到Java applet,没有java servlet。 Applet传递给C服务器的唯一内容是hex数字,表示要采取的操作

用Java编译和运行C程序

我试图从这个链接运行源代码 从Java应用程序编译并运行源代码 我安装了Mingw32编译器更改了编译器位置路径,并在Eclipse中运行示例.cpp文件时出现此错误。 public class C_Compile { public static void main(String args[]){ String ret = compile(); System.out.println(ret); } public static String compile() { String log=””; try { String s= null; //change this string to your compilers location Process p = Runtime.getRuntime().exec(“cmd /C \”C:\\MinGW\\bin\\mingw32-gcc-4.6.2.exe\” C:\\MinGW\\bin\\Hello.cpp “); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); boolean error=false; log+=”\n….\n”; while […]

有效地通过JNI传递大C结构

我有一个大的C结构(大约40个成员,int和char []),我必须通过JNI到Java端进行进一步处理。 这反复发生。 (我已经把GetMethodID()等放到了C端的init()函数中,所以我只需要调用它们一次。) 什么是有效的方法呢? 我能想到: 通过GetMethodID( …, “”, … )使用适当的成员实例化Java类,并通过构造函数传递C结构的所有成员; 使用适当的成员分配Java结构,并通过SetXYZField()初始化(公共)成员; … 我忽视了什么吗? (这是我与JNI的第一次“近战”。)是否真的没有有效的方法来“同步”C结构和Java结构? 什么是更有效的传递方法,1。或2.? 如果是1.,我应该通过CallXYZMethod() (参数列表)还是CallXYZMethodA() (参数数组)传递构造函数参数? 感谢您的输入。 编辑:稍微重写; 2.当然不需要是一个类,如果有一些其他解决方案来处理Java端的C数据,我并不需要Java方面的结构。 编辑2:我在C ++中这样做,但结构本身源于C-linkage回调函数,即没有C ++特定的问题。 改为阅读“C”而不是“C ++”。

奇异值分解实现

我有一个用C实现的SVD库。但是我想在Java程序中调用它的函数。 有一个简单的方法吗? 或者有人请建议使用Java进行SVD​​实现的链接。

Java内插器中的堆栈粉碎

我正在编写一个Java内插器来修改与网络通信相关的系统调用。 基本上,我想修改目标收件人的IP和端口。 代码在我的笔记本电脑上正常工作,但在大学PC上,它给出了一个堆栈粉碎错误 : *** stack smashing detected ***: java terminated ======= Backtrace: ========= /lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x45)[0xb7702dd5] /lib/i386-linux-gnu/libc.so.6(+0xffd8a)[0xb7702d8a] /home/mwaqar/vibe/ldinterposer_2.so(+0x28e4)[0xb77c98e4] /home/mwaqar/vibe/ldinterposer_2.so(connect+0x9c5)[0xb77c9093] /usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/libnet.so(+0xceff)[0x8b226eff] /usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/libnet.so(Java_java_net_PlainSocketImpl_socketConnect+0x4c1)[0x8b227c51] 相关代码( 连接系统调用的插入)如下: int connect(int fd, const struct sockaddr *sk, socklen_t sl) { struct sockaddr_in *lsk_in = (struct sockaddr_in *) sk; struct sockaddr_in6 *lsk_in6 = (struct sockaddr_in6 *) sk; struct sockaddr_in addr4; unsigned int len; int […]