java 通过jni调用dll

1、java jni 就是可以调用,也只能调用c,c++写的方法。


2、我首先声明一个类,此类中包含有本地接口的声明,比如:


       private static native void sayHello();
       private static native void showMessageBox(String msg);


       然后类编译通过。


      这个时候生成c++代码的原型,也就是c++方法中的签名,通过javah  -jni 类名来生成头文件,也就是.h文件,也就是上面的那个类中的方法签名,


      生成头文件引用了jni.h,jni.h又引用了其它头文件,jni.h,jni_md.h,jawt_md.h这三个头文件存在java的bin目录下,它们定义了


    一些变量、参数的,利用javah -jni命令生成的头文件引用了jni.h。


     如果用vs2010 c++环境,则把这三个头文件,复制到D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include下面。


       然后再vs2010 下建项目win32 项目,然后选择dll。把javah  -jni生成的头文件拷贝过去,然后再在cpp文件中实现。


      最后把生成的dll,拷贝到java.library.path下,比如jdk的bin目录下,然后运行程序成功。


      具体的java例子:


package navtiveinterface;  
public class JndiTest {  
   private static final String DLL_NAME = "TestJndi";  
   static{  
       System.loadLibrary(DLL_NAME);  
   }  
   private static native void sayHello();  
   private static native void showMessageBox(String msg);  
     
   private static  void sayHello(String msg){  
       System.out.println("你好:"+msg);  
   }  
   public static void main(String[] args) {  
       //System.out.println(System.getProperty("java.library.path"));  
       System.out.println("测试jndi,调用c++的函数");  
       sayHello();  
       sayHello("呆呆");  
       showMessageBox("iloveyou");  
   }  
}  
vs2010工程下载地址:http://download.csdn.net/detail/qqqwwwqw/6572619


jnative调用dll,另外的地址:http://tvjody.iteye.com/blog/125643   


J/Direct,java/com 都是要在微软的java 虚拟机上才支持。


     考虑到vs2010编译出来的代码是在32位下运行,因此jdk也需选择在32位的jdk下运行。    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值