Java新手 想通过JNI调用 c++写的dll 老是失败 跪求办法QwQ

图片说明
图片说明

4个回答

兄弟,也许你正好需要这个https://blog.csdn.net/whustyle/article/details/49123933

注意异常提示信息:cann't load IA 32-bit.dll on a AMD 64-bit platform
请确认你的调用方与被调用方式用一致的编译平台

weixin_39931435
weixin_39931435 同求
大约一年之前 回复
weixin_41423378
银翼的魔术师s 那要怎么办,java用jdk编译 c++用vs编译,两个本来就不一样
大约一年之前 回复

可以考虑使用JNA基于JNI的封装,使用起来更容易些

jdk版本问题,你调用的dll和你用的jre应该都是32位或者64位的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java新手 想通过JNI调用 c++写的dll 老是失败 跪求办法QwQ
![图片说明](https://img-ask.csdn.net/upload/201808/29/1535516907_29141.jpg)n![图片说明](https://img-ask.csdn.net/upload/201808/29/1535517052_434482.jpg)
java通过jni调用dll,与调用C#写的dll
暂无,做个标记
JNI调用C++/C的DLL失败(求助)
欲在Android上调用C++或者C的动态库,rnrn在Android调用.so的文件已经可以。但是调用.dll的文件还是不行,rnrn-------------------导出的动态库与调用的名称已经相同rnrn已经放置过的路径有rnrn1. system32下rnrn2. 导出的类(.class)目录下rnrn3. java源文件的目录下.rnrn4. 在配置Java Build Path选项卡处更改rnrn但最后还是在LoadLibrary处抛出异常,rnrn可以查看到提示信息如下:rnrn06-27 09:50:57.980: ERROR/AndroidRuntime(837): Caused by: java.lang.UnsatisfiedLinkError: Library Jni_Stduy not foundrn06-27 09:50:57.980: ERROR/AndroidRuntime(837): at java.lang.Runtime.loadLibrary(Runtime.java:489)rn06-27 09:50:57.980: ERROR/AndroidRuntime(837): at java.lang.System.loadLibrary(System.java:557)rn06-27 09:50:57.980: ERROR/AndroidRuntime(837): at Jni_Stduy.Pg.Jni_Study.(Jni_Study.java:10)rnrn在网上查了好多信息均不能解决这个问题~ rnrn在此,求高人解答!rnrn提前致谢!
java调用C JNI方式调用DLL
Java调用C的操作流程: 1.在java中声明一个本地方法(没有方法体) 一般本地方法写为static方法,因为只是调用本地方法实现逻辑,并不需要创建实例。关于本地方法的详细解释见http://blog.csdn.net/jiakw_1981/article/details/3073613。以下是本地方法的写法。 2.运用javah命令得到.h文件作为C的头文件 javah生
JNI——Java调用DLL
基本概念JNI其实是Java Native Interface的简称,也就是java本地接口。它提供了若干的API实现了和Java和其他语言的通信(主要是C&C++)。对于那些对性能要求比较高的Java程序或者Java无法处理的任务无疑是一个很好的方式。实验方案假设我们的Java程序为J2C.java,C程序为J2C.c,Java与C之间的通信函数名为write2proc; write2proc的
【Java】【JNI】通过JNA调用DLL库
用VisualStudio编写库源码 编译生成DLL(和JDK位数要一致) 拷贝DLL到Java项目 引用JNA库 编写Java接口调用DLL库 调用JNA接口
java通过JNI调用c++的dll
dll方法中包含托管句柄,java调用过程就用问题:rnrnrn# An unexpected error has been detected by HotSpot Virtual Machine:rn#rn# Internal Error (0xe0434352), pid=3380, tid=3192rn#rn# Java VM: Java HotSpot(TM) Client VM (1.5.0_11-b03 mixed mode)rn# Problematic frame:rn# C [kernel32.dll+0x12afb]rn#rn# An error report file with more information is saved as hs_err_pid3380.logrn#rn# If you would like to submit a bug report, please visit:rn# http://java.sun.com/webapps/bugreport/crash.jsprn#rnrn下面是c++代码:rnJNIEXPORT jboolean JNICALL Java_com_power_device_attenddevice_dll_ZKAttendDevicePort_connect_1Netrn(JNIEnv *env, jobject obj, jstring ipAddress, jlong port)rn System::Console::Write("enter connection");rn String ^ip = gcnew String(jstringTostring(env, ipAddress));rn System::Console::Write(ip->ToString());rnrn zkemkeeper::CZKEMClass ^zc1 = gcnew zkemkeeper::CZKEMClass();rn /**rn rn return (*globalZC)->Connect_Net(ip->ToString(), 4370);rn */rn //zc1->Connect_Net("192.168.2.177", 4370);rn System::Console::Write("end connection");rn return false;rnrnrn一旦我用了rnzkemkeeper::CZKEMClass ^zc1 = gcnew zkemkeeper::CZKEMClass();rn就有问题;;;rnrn
Java通过JNI调用C++的DLL文件
第一次接触这个问题,遇到不少坑,来记录下。 1、在eclipse中创建一个Java工程 2、创建一个测试类,如下图MyClass.java 3、cmd打开命令提示符窗口,进入到src目录下,javac命令生成class文件; 4、然后后用javah命令生成 .h头文件,如下图: 5、使用vs2017创建一个工程,如下图: 6、将第四步生成的.h头文件复制到vs工程中,如...
Java通过JNI方式调用DLL的问题!!!
Java通过JNI方式调用DLL,在开发机(开发机32位XP)上好用,服务器(win2008,包括在win7,win8 64位)上都不好用,装32位JDK用32位DLL和装64位JDK用64位DLL都试过了,都不好用,而且不报异常。rnrn各位大侠这是什么情况啊?
Java通过JNI调用VC的DLL总结
Java下有时一些需要效率的操作要用C++来完成,调用C/C++的库一般有两种方式,JNI和JNA。自己学习JNI时也遇到不少坑,这里总结一下JNI的使用过程。 建立Java Project项目: 建立Java类文件,填入包名和类名: 写入如下代码: 如果Eclipse设置自动编译的话,现在在项目bin目录下应该生成了CdesDll.class文件,接下来使用javah命令生成C++需要的....
关于java通过JNI调用DLL的问题!
我找了一些JAVA调用DLL的例子看了一下,但VC程序都是根据JAVA程序通过JAVAH编译生成*.h后的内容写的,最后自己生成DLL的,而且在DLL中必须include这个包,那么如果DLL是别人已经写好的。内部情况我不知道,只知道对外的一些API,在不改动DLL的情况下,请问如何写JAVA程序通过JNI调用DLL呢?rn请各位帮忙!
Java通过JNI调用DLL动态库
http://download.csdn.net/detail/asuyunlong/9301723
Java通过JNI 调用动态链接库DLL
JNI(Java Native Interface)Java本地接口,主要作用是实现java代码与C、C++编写的代码交互。在Android编程中,so库的访问也用到了jni技术。理论多说无益,还是看java连接dll的实战吧。如下:例:java中调用demo.dll文件中的 hello()方法。1、java1)装载dll文件 有两种方式System.load();和System.load
java通过JNI调用DLL文件
JNI简介: JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。允许Java代码和其他语言写的代码进行交互。JNI是JDK提供的一个native编程接口。JNI 允许Java程序调用其他语言编写的程序或者代码库, 比如C/C++。Java 在内存管理和性能上有一定的局限,通过JNI我们就可以利用Native程...
Java通过JNI调用C++的DLL库
Java通过JNI实现调用C++程序 好久没碰JNI这个东西了,刚工作的时候自己写过点东西,这么些年很少用到,最近一个项目又用到它了,因此总结一下给自己留个记号!省下下次再用到到处查资料。Java通过JNI实现调用C或者C++写的程序,实现对底层或者下位机的读写通讯,在桌面开发中是经常遇到的。这里通过一个演示程序,实现Java通过JNI实现C++方法调...
delphi下调用c写的dll老是出错
delphi下调用c写的dll老是出错,我想问一些delphi下怎么和c函数兼容,主要是指他的参数,象这样的函数:rnint method(const int nReply, const int nLevel,rn const char *sID, rn char *sID, int *nErrorCode,rn const char cType,cPTotal=0,char cNumber=0);rn这个函数是c的,delphi里怎么调用的时候怎么掉啊,参数应该怎么对应啊
j2ee通过jni调用dll
java通过jni调用dll动态链接库及创建dll动态链接库demo。
java通过jni调用c编译的dll或so
先介绍一下jni:Java Native Interface,它能够使java和其他编程语言编写的应用程序和库进行相互操作。        java中调用c函数,主要是通过本地化接口jni来实现的,在windows下,调用的是dll文件,在unix下,调用的是so文件。这里先介绍编写调用c函数的基本步骤:       (1):编写.java文件,其中c中的函数要用public nati
java 通过jni调用c中包含多类的dll
大家好!rn我最近正在学习java调用c的dll,我试着自己编写了一个例子,我把public native声明的函数和system.loadlibrary()放在同一个java文件中,然后,在vc中把public native的方法实现了,然后在java中实现调用,测试成功。rn但是现在我遇到一个问题,我把public native的方法声明放到几个类中,然后再用javah生成c的 .h文件,然后在vc6.0中把用javah 生成好的 .h文件放到一个工程里实现,然后生成成功。[color=#800000]但是现在我不知道怎么在java中调用dll中的方法了?[/color],[color=#FF0000]java中public native声明的方法的类和dll中对应的方法又怎么调用?[/color]
java写的一个使用jni调用c/c++的dll
NULL 博文链接:https://wuneng94zui.iteye.com/blog/1218725
jni:java通过jni如何调用MFC DLL
java代码如下: rnpublic class TestHello rn rn static rn System.loadLibrary("TestHello");rn rn rn public static native void hello(String msg);rn rn public static void main(String[] args) rn rn hello("D:\\shoky.mp3");rn rn rn rnrn我想通过MFC dll写一个有播放界面的来播放 D:\\shoky.mp3这个文件.rnJNIEXPORT void JNICALL Java_TestHello_hellorn(JNIEnv * env, jclass obj, jstring jMsg)rnrn const char * strFile;rn  strFile = env->GetStringUTFChars( jMsg , 0); rn  MessageBox( 0, strFile,"MFC dll ", 0 );rn env->ReleaseStringUTFChars( jMsg, strFile); rnrnrnvoid CTestHelloApp::ShowMP3Play(CString str)rnrn playMp3->Create(IDD_DIALOG1,NULL);rn     playMp3->ShowWindow(SW_SHOW);rn playMp3->SetPlayFile(str); rnrnShowMP3Play这个函数是用来显示播放界面的. rn我如何在Java_TestHello_hello这个函数内调用ShowMP3Play()这个函数呢?
java 通过JNI 调用C/C++ 程序
       java是属于比较上层的语言,在大多数情况下,它都可以给开发带来方便和高效率;但是在一些特定的情况下,它可能就没有低级语言那么好用了,所以就需要有能够调用其他低级语言来实现其不擅长的功能.       JAVA通过JNI来调用C语言的实现,其基本思想是,由java定义接口,由c实现并生成dll文件,再由java通过之前定义的接口调用具体的实现.      主要步骤有: 编...
JAVA通过JNI调用C语言库
重点内容##1.前言 - JDK版本1.8.0 - 操作系统 ubuntu 16.04.2 - 目标实现JAVA调用C语言库 root@msos:/root# java -version openjdk version "1.8.0_151" OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-...
JAVA通过JNI调用C代码。
开发阶段遇到很多坑,在此记录一下。1.方法声明在代码中声明一个方法,该方法在linux环境中会通过动态链接库来调用C代码。切记!!!一定要将方法声明要加native2.编译JAVA文件,然后通过命令行 javah -jni xxx(class文件)生成.h的JNI文件。JNI文件中的方法,就是你在Java里定义的方法,语法为JNI的。此时你需要写对应的c代码,去实现h文件中相应的方法。切记!!! ...
求助:通过JNI在C中调用java
不知道c该用什么编译器, rn我用的刘晓华的《精通java核心技术》里面的源码只能调通java调用c的 rn请那位大侠能给一范例? rn谢谢了 rn
C通过JNI调用java中的静态方法。
1,编写需要调用的静态方法。 // 产生UUId方法 public static String getUUId(){ return UUID.randomUUID().toString(); } 2,编写调用接口。 // C调用java中的静态方法 public native void accessStaticMethod(); 3,头文件。 JNIEXPORT void ...
C通过jni调用Java中的方法。
1,编写需要调用的方法。 // 产生指定范围的随机数 public int getRandomInt(int max){ Log.e("LOG","getRandomInt 执行了......"); return new Random().nextInt(max); } 2,编写C/C++调用的接口 public native void accessMethod(); ...
win7下java通过JNI调用C代码
昨天讲了 java 使用 Jnative.jar 包方式调用c代码,后来又看了使用JNI的方式,这里再做个小结。 网上例子demo讲解很多,但是都不详细,简直误人子弟,也是醉了!!!还是要自己研究。 1、其实Jnative方式是对JNI进行了一层封装,便于使用,直接通过接口就可以了,程序员用起来方便啊。我发现xxx.c 文件里面的是使用C语言编写的,而使用JNI 实现的xxx.c 是用c++编写
Java 通过 JNI 调用 C/C++ 类库
说明由于一些涉及到设备或底层操作的类库,大多是C或C++语言编写的,对于Java Web开发者,在涉及到相应的项目中,不可能再去将相应的类库用Java重写。这时,就需要通过Java代码去调用C/C++的类库来完成工作。操作环境: - JDK 1.8.0_45 - Eclipse - Visual Studio 2013注意: demo中的文件路径需要加以注意!!!演示实现整体目标通过Java调
java怎么用C写的DLL,要写jni的DLL,JNI的DLL怎么用C的DLL呢
下面是C的DLL几个函数,不会写啊,各位好心人帮帮我rnrnrnbool USB_Authentication(int mode,int secnr,char * keysnr);rn//将读写器中的密钥与卡中的密钥进行验证(在进行对卡片的读写操作之前,rn//必须成功执行此指令)系统初始化时,主控设备把每个扇区的密码加载到rn//读卡器中,成功返回true,失败返回falsern//mode表示验证密钥模式,0,验证A密钥,1,验证B密钥rn//secnr表示要验证的扇区号rn//keysnr 长度为20位的字符数组,表示6字节密码加上4字节卡序列号rnrnrnbool USB_Read(int secnr,int Blonr,char * Result);rn//读出一个块的数值,成功返回true,失败返回falsern//secnr 表示扇区号,rn//Blonr表示块号rn//返回值,一个长度32的字符数组,表示16个字节的数据rnrnbool USB_Write(int secnr,int Blonr,char * data);rn//对制定块进行整块写操作,成功返回true,失败返回falsern//secnr表示扇区号rn//Blonr 表示块号rn//data一个16位的字符数组,表示16个字节的数据
Java通过JNI调用C函数Demo
Java通过JNI调用C函数Demo 需要的人下载看看
Java通过jni调用c语言方法
有些人会选择用VC++来生成dull文件,但是由于VC++生成的dll文件是32位的,而现在大多数人使用的JDK是64位的,两者不兼容而导致程序无法运行,只能把JDK卸载换装32位版本的才行。但是vs2015可以生成64位的dll文件,所以我们今天就用它来实现java调用c语言方法 1、新建java工程Sudoku 2、新建类文件UseCproject 3、类中方法如图示 4、保存
c调用java的jni
java的jni c调用java必须要得投文件
JNI(c调用java)
这段代码有问题吗?rnJNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);rnrn返回不成功!rnrn#include rnrnint main() rn int res;rn JavaVM *jvm;rn JNIEnv *env;rn JavaVMInitArgs vm_args;rn JavaVMOption options[3];rn vm_args.version=JNI_VERSION_1_2;rnrn//这个字段必须设置为该值rn options[0].optionString = "-Djava.compiler=NONE";rn options[1].optionString = "-Djava.class.path=.";rn options[2].optionString = "-verbose:jni";rnrn//用于跟踪运行时的信息rnrn vm_args.version = JNI_VERSION_1_2;rn vm_args.nOptions = 3;rn vm_args.options = options;rn vm_args.ignoreUnrecognized = JNI_TRUE;rnrn res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);rnrn if (res < 0) rn fprintf(stderr,"Can't create Java VM\n");rn// exit(1);rn return 0;rn rn (*jvm)->DestroyJavaVM(jvm);rn rn fprintf(stdout,"Java VM destory.\n");rn return 1;rn
JNI DEMO:java jni技术 调用 c/c++ 的dll
java 调用 dll 的方法,即JNI的使用,demo中有get()/set()方法,操作步骤详细,即使是没用过java的程序员按照步骤依然可以成功。
Java JNI调用DLL方法
在JAVA中如何通过JNI调用VC动态库,以及在如何在VC中调试
JNI,java调用dll so
.java中rnpublic class jMsgStrrnrn staticrn rn System.loadLibrary("DeliveryStr");rn rnrn rn public native static String GetM();rnrn public static void main(String [] args)rn rn jMsgStr pMsg = new jMsgStr();rn System.out.println( pMsg.GetM() );rn rn rnrnrn.cpp中rn#include "jmsgstr.h"rn#include "main.h"rnrnrnBOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)rnrn switch (fdwReason)rn rn case DLL_PROCESS_ATTACH:rn // attach to processrn // return FALSE to fail DLL loadrn break;rnrn case DLL_PROCESS_DETACH:rn // detach from processrn break;rnrn case DLL_THREAD_ATTACH:rn // attach to threadrn break;rnrn case DLL_THREAD_DETACH:rn // detach from threadrn break;rn rn return TRUE; // succesfulrnrnrnJNIEXPORT jstring JNICALL Java_jMsgStr_GetM(JNIEnv * pEvn, jclass pCls)rnrn const char * pText;rn char strMsg[255];rn strcpy(strMsg,"java Load DLL");rn pText = m_strMsg;rn return pEvn->NewStringUTF(pText);rnrnrn编译都通过了,让dll和class在同一地方rnrnWinXP下输出:rnC:\JavaFile>java jMsgStrrnException in thread "main" java.lang.UnsatisfiedLinkError: jMsgStr.GetM()Ljava/lang/String;rn at jMsgStr.GetM(Native Method)rn at jMsgStr.main(jMsgStr.java:14)rnrnjava:14是什么?rn看了网上的一些资料,但我都通不过.rnjava接触不久,很多地方不明白,不知要怎么做才通得过,请大侠们指导下.谢谢
JNI小程序:Java通过JNI调用C程序
JNI是Java Native Interface的缩写,中文为JAVA本地调用。使用JNI可以很方便的用我们的Java程序调用C/C++程序。很多时候,某些功能用Java无法实现,比如说涉及到底层驱动的一些功能,这时候我们就可以利用JNI来调用C或者C++程序来实现,这就是JNI的强大之处。但是JNI也有它的缺点,使用java与本地已编译的代码交互,通常会丧失平台可移植性。 1、首先配置SDK
>>>java用jni 调用dll的问题,怎么写dll部分<<<
http://www.programfan.com/showarticle.asp?id=1660rn我是根据上面的文章做的rn生成的.h文件后rn怎么生成dllrn文中没说怎么做rn望达人解惑~~
JAVA通过jni调用C++
JAVA通过jni调用C++ 创建Java文件 public class HelloJni { native void hello(); static { System.loadLibrary(&quot;Hello&quot;); } public static void main(String args[]) { Hello...
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview