问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 读取DLL 咋弄?

发布网友 发布时间:2022-05-27 03:29

我来回答

3个回答

热心网友 时间:2023-10-03 07:20

一、建立java文件
注意点:1.要对dll里面的方法做本地声明
2.加载dll
示例代码:
public class testdll {
static{
System.loadLibrary("goodluck"); //注意:不写扩展名,名字要与dll的文件名一致
}
public native int getValue();
public native void setValue(int i); /**
* @param args
*/
public static void main(String[] args) {
testdll test=new testdll();
test.setValue(10);
System.out.println(test.getValue());
}
}

二、编译
javac testdll.java ------如果没有错,进行下一步
javah testdll ------生成testdll.h这个头文件

三、实现步骤一中声明的方法
打开VC++6.0,建立一个dll空工程,把testdll.h导入工程中,新建一个test.cpp源文件
打开testdll.h,发现里面有两个方法:
/*
* Class: testdll
* Method: getValue
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_testdll_getValue
(JNIEnv *, jobject);/*
* Class: testdll
* Method: setValue
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_testdll_setValue
(JNIEnv *, jobject, jint);

JNIEXPORT不用管,第二个单词jint/void是返回值,jint相当于int类型,JNICALL不用管,每一个方法名前都有前缀Java_testll_,前两个参数JNIEnv *和jobject不用管,第二个方法的第三个参数jint就是java文件里的int i。
上面有声明了,现在就要实现这两个方法,把代码补充进来吧:)
示例代码:
#include "testdll.h"
int i=0;
JNIEXPORT jint JNICALL Java_testdll_getValue
(JNIEnv *, jobject){
return i;
}
JNIEXPORT void JNICALL Java_testdll_setValue
(JNIEnv *, jobject, jint j){
i=j;
}

四、编译
此时编译会出现error,主要是提示找不到jni.h(这个包含在testdll.h)里,需要我们把jni.h、jni_md.h复制到C:\Program Files\Microsoft Visual Studio\VC98\Include这个目录里(默认安装目录,如果安装VC不是这个目录,请自行找到Include目录)。
jni.h------------------jdk安装目录\include
jni_md.h------------jdk安装目录\include\win32
然后再编译,构建,就有了test.dll这个动态链接库文件了,把它重命名成goodluck.dll,然后复制到testdll.java的目录下,运行吧:)
java testdll
结果:
10

热心网友 时间:2023-10-03 07:21

只能用JNI读取Dll文件JNI是Java Native Interface,也就是Java本地接口.可以通过JNI调用Window的DLL文件.但要遵循一定的规则.比如方法的命名要按照package_class_method名.

热心网友 时间:2023-10-03 07:21

用文字流的方式进行读取
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
水下摄影注意问题 水下摄影要会游泳吗 拇指与食指之间是什么 哪位师傅能告诉我,,螺纹深度的计算公式啊 理想情况下双目深度测量误差与各参数间关系的简单分析 QQ空间黄钻最高等级是多少,QQ黄钻等级有什么用 打篮球真的能长高么, 我有一学长打篮球,也不怎么高啊,,,【学长我错了... 空间形态类型有哪些 ...整形形态,分型形态,无序的自然形态分别是什么... 形有哪些 戴尔的笔记本,2G内存,RAM占用率高达80%多,请教如何清理释放内存啊???? 有没有什么软件可以登录对方然后查看聊天记录的,其实? 请问怎么写会计本科的毕业实习报告? 如何第一时间玩到APEX英雄手游? 红枣鸡蛋姜汤什么时候喝最好 解梦!梦见自己拜佛 好象是观世音菩萨。在一个房间里我拿三个很大香 磕了3个头!请问有什么含义? 在录音方面,EQ指的是什么? 塔城到乌鲁木齐的大巴在地窝堡机场可以下车吗 可以告知下光环助手推送消息说的apex手游,怎样登陆来玩吗? 塔城地区有机场吗 太阳能电池板选配 我有6块30V,265W的太阳能板,怎么配蓄电池怎样才能变220交流3000功率? 凉拌麻辣手撕鸡丝怎么做 凉拌手撕鸡丝怎么做好吃,凉拌手撕鸡丝的家 凉拌手撕鸡丝怎么做 凉拌手撕鸡丝的做法,凉拌手撕鸡丝怎么做好吃 指尖江湖桃花村房子后面的宝箱怎么拿? 指尖江湖已开的箱子在哪里看 剑网3指尖江湖落雁雪酿鱼怎么做 落雁雪酿鱼配方一览 指尖江湖要抓螃蟹进笼子才能有宝箱的是什么地图? Java调用dll的几种方法 现在我有一个DLL文件,我想在JAVA中调用DLL文件中的方法,请问如何实现? 请问以下JAVA说明应该怎样操作?关于调用dll的.谢谢了,大神帮忙啊 java调用dll几种方式总结 JAVA调用dll库 美容院所谓的紫花地丁是什么? 紫花地丁是干什么用得? 新视野大学英语第四册unit4课文翻译 遇见你,我得到了幸福作文初二500 新视野大学英语4 翻译 新视野大学英语第二版第四册泛读教程的翻译,急求麻烦了, ()文件是Windows操作系统中数字视频文件的标准格式 A。mdi B。gif C。avi D。wav 跪求新视野大学英语第二版快速阅读4的全文翻译 汉翻英 新视野 新视野大学芵语第一册unit4-boby language的译文 吃什么泡水喝护肝养肝就用雷博士强肝糖浆? 什么泡水喝养肝 喝水时加它竟可以养肝护肝 青岛凤凰众筹跑路,有要回来钱的吗? 资产证券化能及时变现吗? 物业服务合同期限?