草庐IT

java - JNI线程模型?

当我从Java调用C/C++时,JavaVM或JNI是否会创建一个新线程来运行C/C++代码,而我的Java线程正在等待?我问这个是因为我的C/C++代码在GPU上运行某些东西,我需要检查特定的缓冲区以取回结果。获得结果后,我需要再次调用我的Java函数。所以我在考虑在C++端创建一个线程,该线程不断检查缓冲区,一旦有一些数据可用,就会回调Java端。 最佳答案 JNI不会在后台创建任何新线程。native函数与调用native函数的java方法在同一线程中执行。反之亦然,当native代码调用java方法时,java方法与调用该方

java - 在 C++ 中的 Java native (JNI) 方法中,在 jdoubleArray 和 vector<double> 之间进行转换

我有一个C++dll,其中包含我需要在Java程序中使用的方法。我浏览了所有关于JNI的Sun文档,以及我在网上找到的大量教程,但我似乎无法找到我的代码的问题。事实上,相当一部分代码是从各种教程和Sun网站上剪切和粘贴的。我的具体问题如下:我的C++native方法从我的Java程序接收一个jdoubleArray,它需要映射到一个C++vector,然后该vector可以传递给C++dll中的一个方法。dll中的方法返回另一个vector,然后需要映射到一个新的jdoubleArray,并返回给Java程序。问题似乎是我没有正确执行映射。我的代码如下(为简单起见,我删除了对dll方法

c++ - jni 将字符串转换为字符数组

不熟悉c++,谁能帮我把cmd加到myStr数组,然后传给main()函数,这里是我目前所拥有的:JNIEXPORTvoidJNICALLJava_my_package_JNIActivity_callCmdLine(JNIEnv*env,jobjectobj,jstringcmd){constchar*nativeString=env->GetStringUTFChars(cmd,0);env->ReleaseStringUTFChars(cmd,nativeString);char*myStr[]={"v",nativeString};//intmain(intargc,char*

c++ - 未定义的 md5 引用

这个问题在这里已经有了答案:HowcanIuseopenssl/md5inC++tohashastring?(2个答案)关闭8年前。#includevoidmMD5(unsignedchar*packet,intsize){unsignedchar*res;MD5((unsignedchar*)&packet,size,(unsignedchar*)&res);for(inti=0;i我收到错误:对MD5的undefinedreference谁能帮帮我?

java - 在多个 jni 调用中保持某种 c++ 对象存活

我的java代码将调用现有的c++代码来解析文件。它将生成一个保存许多数据的对象。我将调用jni的第二种方法来访问此类数据,当我调用第二种方法时,我必须再次解析文件。这显然是正确的行为。有办法解决吗?顺便说一句:我是c++的新手。 最佳答案 我不确定我是否理解你的问题。但我想你想要做的是在多个jni调用中保持某种c++对象处于Activity状态。你可以做很多事情。首先解析您的文件并将您的C++对象存储在全局变量中。这是最简单的解决方案,但不是一个很好的解决方案。您还可以将c++对象的生命周期移动到java中。jlongjava_s

c++ -/MD 和/MDd(使用运行时库)有什么区别?

当我在我的代码中添加以下行时:std::stringsFrameTag我收到以下链接器错误:Error34errorLNK2005:"public:__thiscallstd::basic_string,classstd::allocator>::~basic_string,classstd::allocator>(void)"(??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ)alreadydefinedinVFPAnalyzerApi.lib(VFPEvaluation.obj)msvcpr

java - 对 getClass 的 jni 调用为作业对象返回 null

我在使用JNI从C++代码进行Java调用时遇到了问题。我能够获得工作对象,但对工作对象的任何API的调用都失败了。经过将近一天的挖掘并与其他可用的JavaAPI(我在代码中调用的作业对象)进行比较,我发现了一个不同之处。下面这段代码voidprintClassInfo(JNIEnv*env,jobjectobject,jclassklazz){printf("printclassinfo1\n");printf("printclassinfo2\n");//FirstgettheclassobjectjmethodIDmid=env->GetMethodID(klazz,"getCl

c++ - C++中MD5的快速实现

首先,要明确一点,我知道C++中存在大量MD5实现。这里的问题是我想知道是否比较哪个实现比其他实现更快。由于我在大小大于10GB的文件上使用此MD5哈希函数,因此速度确实是这里的主要问题。 最佳答案 我认为avakar试图表达的观点是:在现代处理能力下,硬盘驱动器的IO速度是瓶颈,而不是哈希计算。获得更高效的算法对您没有帮助,因为这不是(可能)最慢的点。如果您正在做任何特殊的事情(例如1000轮),那么它可能会有所不同,但如果您只是计算文件的哈希值。您需要加快IO,而不是数学。 关于c+

java - 使用JNI访问C中Java对象中的Java对象

我是JNI的新手,已经掌握了使用JNI处理Java对象中的整数和数组的基础知识。现在我正在尝试修改/访问Java对象中的Java对象。我一直在互联网和StackOverflow上搜索,但还没有找到如何执行此操作。这是例子。在Java中:publicclassObjectOne{privatebyte[]buff;......}publicclassObjectTwo{privateObjectOneobj;......}在JNI中,如何通过ObjectTwo从ObjectOne访问“buff”?我试过这样的东西......JNIEXPORTvoidJNICALLJava_accessB

c++ - 如何在此代码 C++ 中返回字符串中的 md5 哈希值?

我有这段代码可以正确显示字符串的md5。我更喜欢向函数返回一个字符串,但是我在将md5的值转换为我的字符串时遇到了一些问题。这是代码:stringcalculatemd5(stringmsg){stringresult;constchar*test=msg.c_str();inti;MD5_CTXmd5;MD5_Init(&md5);MD5_Update(&md5,(constunsignedchar*)test,msg.length());unsignedcharbuffer_md5[16];MD5_Final(buffer_md5,&md5);printf("Input:%s",t