当前位置:  技术问答>java相关

java 中如何使用dll文件

    来源: 互联网  发布时间:2017-04-07

    本文导语:  如题 | zuo yige public class NativeDemo  {            int i;     int j;     public static void main(String args[])     {              NativeDemo ob = new NativeDemo();            ob.i = 1...

如题

|
zuo yige
public class NativeDemo 
{  
         int i;
    int j;
    public static void main(String args[])
    {
             NativeDemo ob = new NativeDemo();
           ob.i = 10;
            ob.j = ob.test();
            System.out.println("this is ob.i:"+ob.i+"n");
            System.out.println("this is ob.j:"+ob.j);
    } 
    public native int test();
    static 
    {
     System.loadLibrary("NativeDemo");    
    }
}

 


2.Compile file NativeDemo.java 
Javac NativeDemo.java

3.Use javah.exe to produce file NativeDemo.c and NativeDemo.h
a : javah NativeDemo to produce NativeDemo.h which is:



 
/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class NativeDemo */

#ifndef _Included_NativeDemo
#define _Included_NativeDemo

#pragma pack(4)

typedef struct ClassNativeDemo {
long i;
long j;
} ClassNativeDemo;
HandleTo(NativeDemo);

#pragma pack()

#ifdef __cplusplus
extern "C" {
#endif
extern long NativeDemo_test(struct HNativeDemo *);
#ifdef __cplusplus
}
#endif
#endif
b : use javah -stubs NativeDemo to produce NativeDemo.c which seems as:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include 

/* Stubs for class NativeDemo */
/* SYMBOL: "NativeDemo/test()I", Java_NativeDemo_test_stub */
__declspec(dllexport) stack_item *Java_NativeDemo_test_stub(stack_item *_P_,struct execenv *_EE_) {
    extern long NativeDemo_test(void *);
    _P_[0].i = NativeDemo_test(_P_[0].p);
    return _P_ + 1;
}
 

4. Write your own implimentation of method test()
//file name test.c



 
#include 
#include "nativedemo.h"
#include 

long NativeDemo_test(HNativeDemo *this)
{
    printf("hello:!n");
    printf("this is in the native method!n");
    return (unhand(this)->i)*2;
}

 

5. link NativeDemo.c and test.c to produce NativeDemo.dll
Use VC++5.0 tools :Cl.exe 
Cl /GD NativeDemo.c test.c /LD
then we get NativeDemo.dll

系统将有如下提示:

NativeDemo.c
test.c
Generating Code...

/out:NativeDemo.dll
/dll
/implib:NativeDemo.lib
NativeDemo.obj
test.obj
Creating library NativeDemo.lib and object NativeDemo.ex
Press any key to continue 




6.Run 

java NativeDemo

we get the such result:

D:vj11usernative>java NativeDemo
hello:!
this is in the native method!
this is ob.i:10

this is ob.j:20

D:vj11usernative> 


NOTE:
Do not forget this: 
c:> set INCLUDE=d:javainclude;d:javawin32;%INCLUDE%
C:>set LIB =d:javalib;%LIB%
where d:java is the directory of your jdk

new version jdk1.2.1 :

With new jdk1.2.1 :

1.javac NativeDemo.java

2. javah NativeDemo to produce head file (You need not to javah -stubs NativeDemo to produce NativeDemo.c file),

You don't need the c file. Just the NativeDemo.h is sufficient!

3.Use VC++ produce a window dll project and add the NativeDemo.h to it.

then implement the function. All is OK!
NOTE: the data type conversion between java and c++.See jni.h for more information.

|
Windows构件模型是基于COM的,目前JDK没有提供任何直接访问COM的类库。因此,如果需要访问这些资源,我们必须通过JNI实现。JNI是Java世界和其它语言间的一座桥,Java通过访问JNI定义的接口来获取服务。在JNI的另一面,我们可以通过C/C++或其它语言实现这些接口。通过本地语言C/C++我们可以创建COM构件,并且使用COM的服务,最后将结果返回给Java程序。

here is a tutorial
http://java.sun.com/docs/books/tutorial/native1.1/index.html

|
but, if you are using Microsoft Visual J++6.0 or J# everything will become easier.
tell me if you are using it.

    
 
 

您可能感兴趣的文章:

  • Java读写包括中文的txt文件时不同编码格式问题解决
  • JAVA编译的CLASS文件可以反编译为JAVA文件吗?
  • 保存java.sh文件时,多出一个java.sh~文件
  • 用什么工具可以把JAVA的.CLASS文件反编译成.JAVA文件??
  • 请问把.class文件反编译为.java文件的工具有什么???能恢复到原来的.java文件吗???
  • 一个.java文件中怎样来调用另一个.java文件中的变量及其它东西!
  • 用java读中文linux中的文件是正确的,用java读英文linux版本中的文件是乱码,如何使英文linux读出的文件数据也是中文的?
  • java文件复制代码片断(java实现文件拷贝)
  • java读取csv文件示例分享(java解析csv文件)
  • 我刚学java,想请教一下,我在文本中创建了一个接口,一个类,还有一个扩展类,保存为.java文件时,如何给文件名?
  • 请教:有没有把java编译好的.java和.class文件编译成各个平台下的可执行文件??.exe?着急着急
  • java文件操作之java写文件简单示例
  • java复制文件和java移动文件的示例分享
  • java读取文件内容的三种方法代码片断分享(java文件操作)
  • 编译前的java文件没有,只有class文件
  • 我用java编了一个程序,是多个java文件,属于一个包,需要联编,但我不会
  • 低级问题:.java文件交付用户怎么运行,难道也是DOS下:java xx.java?有没有.exe?
  • 我在jbuilder中新建一个servlet,源程序为java文件,是怎么从java到servler转换的?
  • 求救!!如何在java程序中调用外部非java的exe文件?
  • 谁有办法用java执行于java.exe不在一个目录的class文件?
  • 怎样把CLASS文件转成JAVA文件
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • MySocketServer.java 使用或覆盖一个不鼓励使用的API???
  • java将类序列化并存储到mysql(使用hibernate)
  • JAVA中不赞成使用(Deprecated)的方法是否可以使用
  • 各位使用过JAVA的朋友们!JAVA好用吗?它有向VC那样的集成开发环境吗?
  • java 可以使用 可是javac不可以使用。老兄帮帮忙
  • 哪位知道如何用JAVA进行图形文件的缩放? 是使用JAVA2D 或是有第三方的软件?
  • java堆栈类使用实例(java中stack的使用方法)
  • env查看环境变量,JAVA_HOME明明在里面,但使用nutch时还是提示JAVA_HOME not set?
  • 如何使用linux下的java编译器????
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • VB编写的DLL不能被JAVA调用,用C将VB编写的DLL包装起来,做成一个新的DLL;用C编写的DLL可以被JAVA调用,用JAVA再进行一层的包装,因为JAV
  • 请问如何在Java中调用一个VB所写的DLL?如何调用这个Dll的方法?如何取得和设置这个Dll的属性值?谢谢!
  • 为什么调用DLL总是出现no FirmClient.dll in java.librayry.path?
  • java中能调用VB写的Dll吗?是不是只能调VC写的dll?
  • MySocketServer.java 使用或覆盖一个不鼓励使用的API??? iis7站长之家
  • 请问如何用java调用C的Dll库
  • java调用dll的问题???至今没有解决!!!求救!!!
  • 在java里如何调用DLL
  • java调用C/C++编写的DLL文件问题,请有经验的高手指教?
  • java能否调用dll或ocx
  • Java和DLL(COM)互操作 Jawin
  • java中如何调用windows的dll?
  • 哪位高手有兴趣跟我讨论讨论java中调用dll文件??小弟有些问题还是不很清楚??
  • java 如何调用 DLL
  • 用Java能不能调用*.DLL?
  • 怎样用java调用DLL动态连接库?
  • 有哪位知道Java调用标准DLL的参考书(或地方)
  • java中调用GDAL DLL的实现方法
  • 我的java程序要進行平台移植,原來的DLL庫還能用嗎?
  • 有没有人做过JNI,我要在C++中调用java类方法,那个javai.dll在那里啊?(重分向谢!)
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3