永发信息网

java怎么读取某个dll文件的内容

答案:2  悬赏:0  手机版
解决时间 2021-12-16 03:18
java怎么读取某个dll文件的内容
最佳答案
JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。
简单介绍及应用如下:
一、JAVA中所需要做的工作
在JAVA程序中,首先需要在类中声明所调用的库名称,如下:
static {
System.loadLibrary(“goodluck”);
}

在这里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。
还需要对将要调用的方法做本地声明,关键字为native。并且只需要声明,而不需要具 体实现。如下:
public native static void set(int i);
public native static int get();
然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。
例如程序testdll.java,内容为:
public class testdll
{
static
{
System.loadLibrary("goodluck");
}
public native static int get();
public native static void set(int i);

public static void main(String[] args)
{
testdll test = new testdll();
test.set(10);
System.out.println(test.get());
}
}

用javac testdll.java编译它,会生成testdll.class。
再用javah testdll,则会在当前目录下生成testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。
全部回答
一、建立java文件 注意点:1.要对dll里面的方法做本地声明     2.加载dll 示例代码: public class testdll {  static{   system.loadlibrary("goodluck"); //注意:不写扩展名,名字要与dll的文件名一致  }  public native int getvalue();  public native void setvalue(int i);

   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,发现里面有两个方法: jniexport jint jnicall java_testdll_getvalue   (jnienv *, jobject);

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

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
空压机的风管冬天容易冻住不能正常工作怎么办
什么是欧盟建筑产品ce认证中的性能声明declar
想知道:泰州市从过船村到泰兴市疾病预防控制
英语do的用法
计算(-0.25)的2017次方×(-4)的2008次方的结
河北科技大学王牌专业
增值税票的左上角的购货单位名称是什么意思左
厦门北站至人才中心坐几路公交
回答下列有关鉴别、检验、除杂质的问题.(1
黄山风景区有什么好玩的地方
求EXO-KWHATISLOVEMV1080P太大不能传的话可以
晨曦柯式印刷有限公司招聘
口袋忍者二代水影天道千手扉间卡卡西选二那个
家庭宽带,没有用路由器,ping网关(也就是tr
犇怎么读,犇是什么意思
推荐资讯
怎样在word中设置所有图的大小一致
小区占地面积为40000㎡,绿地面积约16000平米
核桃仁放的时间长了,有点哈喇味,仍了有点可
为什么男人们和我说话时都轻声细语?
外来务工人员小孩在余姚读书需要转学吗?
拖船那么小,为什么能拖的动那么大而且还
新化县审计局在什么地方啊,我要处理点事
如图为两个质点A、B在同一直线上运动的v-t图
驻马店市三十三小学的地址
兰考县旅游局地址在什么地方?想过去办事
(1)这首词选自,作者是朝代的词人。阅读答案
北小东村委会办公地址在什么地方?我要处理点
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?