精华内容
下载资源
问答
  • 1. java 核心 jni 原理绍前一段时间有同事长问我说java 设用dll 库很不方便可他不会c/c++因为java 1.0 版本后有一个接口名为jni他的原理就是.java---编译--->.class---javah-->.h-----引用---.c/.cc/.cpp----&...

    1. java 核心 jni 原理绍

    前一段时间有同事长问我说java 设用dll 库很不方便可他不会c/c++

    因为java 1.0 版本后有一个接口名为jni

    他的原理就是

    .java---编译--->.class---javah-->.h-----引用---.c/.cc/.cpp---->.dll

    最后

    .java中有一条 System.loadLibrary("DllName");

    在通过public native static getUserInfo(String username,String sid);

    来调c 实现的方法

    这样对c/c++ 有一定功底的人来说是没有多大问题的。

    但是要想调dll 、com 组件 没有必要做这一些事情

    早在1999年开源组织就以经出现了像jacob 这一类开源项目,当然做的比较成

    功有很多,例如jacob、jacom、jawin、jnative等

    在这时给大家介绍一个最成熟的项目jacob 早在1999年就成立了这个开源项目

    经过了十几年的测试应用。所以要相信开源相信java 的魅力。

    2. 下载jacob 开源包

    在jdk/bin 目录下加入jacob.dll 文件

    3.下载 1.15 版本

    Regsvr32 filename.dll 注册该文件 如果没有成功说明 对应com 组件依敕的dll 文件没有(同c/c++) 一样对应的

    依赖包将这些方入jdk /bin目录下

    这一步一定要注册成功,不然后面的就没有办法了

    你想如果注册没有成功c 都调不到java 肯定也调不到你说对吧

    4. 写代码就很容易了不是

    当然接口中加入jacob.jar 包

    package com.test;

    import com.jacob.activeX.ActiveXComponent;

    import com.jacob.com.Dispatch;

    import com.jacob.com.Variant;

    /**

    *

    * 2008-10-5

    * @author liuqing

    *

    */

    public class JaCobTest {

    int EXCEL_HTML = 44;

    /**

    * @param args

    */

    public static void main(String[] args) {

    //注册com组件

    ActiveXComponent app = new ActiveXComponent("PB80.n_fl_tj_xs_interface");

    try {

    Dispatch disp = app.getObject();

    Object []ob = new Object[]{"argOne","argTwo"};

    Variant v = Dispatch.callN(disp, "of_qx_tjdj", ob);

    int a = v.getInt();

    System.out.println("com 接口说:" + a);

    }

    catch (Exception e) {

    }

    }

    /**

    * Excel 测试

    * @param xlsfile

    * @param htmlfile

    */

    public void excelToHtml(String xlsfile, String htmlfile)

    {

    ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 启动excel

    try{

    app.setProperty("Visible", new Variant(true));

    Dispatch excels = app.getProperty("Workbooks").toDispatch();

    Dispatch excel = Dispatch.invoke(excels,"Open",Dispatch.Method,new Object[] { xlsfile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();

    Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Variant(EXCEL_HTML) }, new int[1]);

    Variant f = new Variant(false);

    Dispatch.call(excel, "Close", f);

    }

    catch (Exception e) {

    e.printStackTrace();

    }

    finally {

    app.invoke("Quit", new Variant[] {});

    }

    }

    }

    运行OK

    分享到:

    18e900b8666ce6f233d25ec02f95ee59.png

    72dd548719f0ace4d5f9bca64e1d7715.png

    2011-04-14 15:34

    浏览 1858

    评论

    展开全文
  • 1. java 核心 jni 原理绍 前一段时间有同事长问我说java 设用dll 库很不方便可他不会c/c++  因为java 1.0 版本后有一个接口名为jni 他的原理就是 .java---编译--->.class---javah-->.h-----引用-...

    1. java 核心 jni 原理绍

    前一段时间有同事长问我说java 设用dll 库很不方便可他不会c/c++ 

    因为java 1.0 版本后有一个接口名为jni

    他的原理就是

    .java---编译--->.class---javah-->.h-----引用---.c/.cc/.cpp---->.dll

    最后

    .java中有一条 System.loadLibrary("DllName");

    在通过public native static getUserInfo(String username,String sid);

    来调c 实现的方法

    这样对c/c++ 有一定功底的人来说是没有多大问题的。

    但是要想调dll 、com 组件 没有必要做这一些事情

    早在1999年开源组织就以经出现了像jacob 这一类开源项目,当然做的比较成

    功有很多,例如jacob、jacom、jawin、jnative等

    在这时给大家介绍一个最成熟的项目jacob 早在1999年就成立了这个开源项目

    经过了十几年的测试应用。所以要相信开源相信java 的魅力。

     

     

    2. 下载jacob 开源包

     在jdk/bin 目录下加入jacob.dll 文件

    3.下载 1.15 版本

    Regsvr32 filename.dll 注册该文件 如果没有成功说明 对应com 组件依敕的dll 文件没有(同c/c++) 一样对应的

    依赖包将这些方入jdk /bin目录下

    这一步一定要注册成功,不然后面的就没有办法了

    你想如果注册没有成功c 都调不到java 肯定也调不到你说对吧

     

    4. 写代码就很容易了不是

     当然接口中加入jacob.jar 包

    package com.test;
    
    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;
    
    /**
     * 
     * 2008-10-5
     * @author liuqing
     *
     */
    public class JaCobTest {
    
    	 int EXCEL_HTML = 44;   
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
                                     //注册com组件
    		ActiveXComponent app = new ActiveXComponent("PB80.n_fl_tj_xs_interface");
    		try {
    			Dispatch disp = app.getObject();
    			Object []ob = new Object[]{"argOne","argTwo"};
    			Variant v = Dispatch.callN(disp, "of_qx_tjdj", ob);
    			int a = v.getInt();
    			System.out.println("com 接口说:" + a);
    		}
    		catch (Exception e) {
    			
    		}
    	}
    	/**
    	 * Excel 测试
    	 * @param xlsfile
    	 * @param htmlfile
    	 */
    	public void excelToHtml(String xlsfile, String htmlfile)   
    	  {   
    	       ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 启动excel   
    	      try{   
    	           app.setProperty("Visible", new Variant(true));   
    	         Dispatch excels = app.getProperty("Workbooks").toDispatch();   
    	          Dispatch excel = Dispatch.invoke(excels,"Open",Dispatch.Method,new Object[] { xlsfile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();   
    	          Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Variant(EXCEL_HTML) }, new int[1]);   
    	          Variant f = new Variant(false);   
    	          Dispatch.call(excel, "Close", f);   
    	       }   
    	       catch (Exception e) {   
    	         e.printStackTrace();   
    	       }   
    	       finally {   
    	            app.invoke("Quit", new Variant[] {});   
    	       }   
    	   }   
    
    	
    
    }
    

     

     

      运行OK

     

     

     

    展开全文
  • java 调com_java调用com

    2021-02-28 16:01:12
    一、C#写com组件开发环境 vs20051、新建工程:ClassLibrary1 //根据自己需要取工程名2、右键点击工程->应用程序->程序集信息->使程序集com可见,打上勾右键点击工程->生成->为com Interop注册 打上勾3...

    一、C#写com组件

    开发环境 vs2005

    1、新建工程:ClassLibrary1       //根据自己需要取工程名

    2、右键点击工程->应用程序->程序集信息->使程序集com可见,打上勾

    34655100_1.jpg

    右键点击工程->生成->为com Interop注册 打上勾

    34655100_2.jpg

    3、设置强签名

    打开Visual Studio Command Prompt 输入:sn -k TestComkey.snk 生成TestComkey.snk 文件,注意路径。

    34655100_3.jpg

    在签名 标签中选中 为程序集签名,选择刚刚生成的强名称文件TestComkey.snk 。

    4、GuidAttribute中的Guid

    通过点击工具->创建GUID->选择4->New Guid->copy->替换C# 代码4 中的两个 GUID 值

    5、C#代码

    C#代码中必须定义了接口,才可以按照此方法实现调用。

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.Runtime.InteropServices;

    namespace TestCom     //命名空间名称,根据自己需要自定义。这里我们取名TestCom

    {

    [Guid("E9BCF867-CD81-40d0-9591-ED28D1ED2B53")]     //GUID值

    public interface IEncrypt    //定义接口名

    {

    [DispId(1)]

    string GetEncrypt(string str,string str2);    //返回的字符串值,与需要调用的类的方法名一致。

    }

    [Guid("33A6E58D-E1F5-4b53-B2E2-03B9F8BA2FAD"), ClassInterface(ClassInterfaceType.None)]     //GUID值

    public class Encrypt:IEncrypt    //类名,接口名 ,必须定义接口

    {

    public Encrypt(){}

    public string GetEncrypt(string str,string str2)     //定义具有两个参数的方法,返回字符串。根据各自需要定义。

    {

    return  "测试: "+str+" | "+str2;

    }

    }

    }

    6、编译程序,Debug目录中会生成 ClassLibrary1.dll 和ClassLibrary1.tlb。

    7、将ClassLibrary1.dll 和ClassLibrary1.tlb复制到JAVA开发环境中,JAVA环境中需要安装对应版本的.net framework。

    8、在JAVA开发环境中注册新生成的com组件,在客户环境中,通过regasm.exe注册com组件。

    regasm.exe的默认安装路径为:C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe

    手工注册COM方法:运行命令regasm ClassLibrary1.DLL /tlb:ClassLibrary1.tlb

    9、强签名的dll文件添加到缓存中。

    执行命令:gacutil -i ClassLibrary1.DLL (执行这个命令需要TestCom.DLL 具有强名称)

    gacutil程序在VS目录 Microsoft Visual Studio 8\SDK\v2.0\Bin 目录下,复制到JAVA环境中。

    10、查看注册表regedit,HKEY_CLASSES_ROOT中是否有TestCom.Encrypt 项,如果有说明注册COM成功。如果没有,请重新注册。

    二、Java调用Com

    2、在开发环境中引入jacob.jar,放到WEB-INF\Llib目录下。

    3、拷贝jacob-1.15-M4-x86.dll 文件到 C:\Windows\System32目录,如果是Web应用的话还需要拷贝到jdk1.5.0_16\bin目录(jdk安装目录下的bin目录)

    4、java调用代码 test.java

    import com.jacob.activeX.ActiveXComponent;

    import com.jacob.com.ComThread;

    import com.jacob.com.Dispatch;

    import com.jacob.com.Variant;

    public class test {

    /**

    * @param args

    */

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    try{

    ActiveXComponent dotnetCom = null;

    dotnetCom = new ActiveXComponent("TestCom.Encrypt");     //需要调用的C#代码中的命名空间名和类名。

    Variant var = Dispatch.call(dotnetCom,"GetEncrypt","第一个参数","第二个参数");   //需要调用的方法名和参数值

    String str  = var.toString();  //返回需要的字符串

    System.out.println(str);  //输出得到的字符串。检查结果是否正确。

    } catch (Exception ex) {

    ex.printStackTrace();

    }

    }

    }

    5、运行 test.java

    输出结果为:测试: 第一个参数 | 第二个参数

    完成了Java调用.net DLL的方法!

    展开全文
  • java调用COM组件 DLL

    2011-03-29 16:51:16
    java调DLL自己曾经也做过,当时是通过JNI调的,极其麻烦需要写C++的中间程序,这次又遇到了类似的问题,需要在java中调用vb.net写的com组件,dll的,而且dll封装的不是方法,而是类定义,需要在调用的时候自己实例化...

    java调DLL自己曾经也做过,当时是通过JNI调的,极其麻烦需要写C++的中间程序,这次又遇到了类似的问题,需要在java中调用vb.net写的com组件,dll的,而且dll封装的不是方法,而是类定义,需要在调用的时候自己实例化对象。一开始还打算走JNI的老路,但发现JNI只能直接调用DLL中的方法,无法进行对象实例化。后来无意间在sourceforge上看到jacob项目,一试之下果然不凡,不用碰C、C++,直接调用,废话少说,步骤如下:

        从sourceforge上下到jacob的压缩包,其中有两个关键文件,一个是jacob-[版本号].jar,另一个是jacob-[版本号]-[x86/x64].dll,其中x86对应32位操作系统,x64对应64位的,把这个dll放到windows/system32下,jacob.jar导入项目的classpath,把dll用.net framework注册,以我的机器上.net framework安装位置为例,注册命令为:

    C:\Windows\Microsoft.NET\Framework\v2.0.50727\regsvcs.exe [需要调用的dll文件路径]

    注册后就可以在java程序中调了,

    ActiveXComponent axc = new ActiveXComponent("ZDSJMSF.SC.ZDSJMSF.SuanFa"); //构造函数参数为Class全名
    Dispatch mycom = (Dispatch) axc.getObject(); //相当于对象实例化
    Dispatch.put(mycom, "propBuySum","5424"); //为对象的属性赋值
    Dispatch.callN(mycom, "Init", new Object[] {});//调用无参数方法Init为方法名
    Dispatch.callN(mycom, "GetBuyCode", new Object[] {15,"9"}); //调用带参方法
    String propBuyCode = Dispatch.get(mycom, "propBuyCode").getString();//获取对象属性
    
    
    

     

     

    展开全文
  • Java调用dll Java调用COM组件

    千次阅读 2013-12-05 10:48:43
    JNative调用dll很方便,只是需要dll有导出函数,否则不到。就是说要调用的方法必须是导出函数。如果不知道你的dll有没有这个导出函数,可下载这个软件查看——DLL函数查看器。 下载JNative开源项目(百度之),...
  • 要在java的话。就要用到JNI技术。JNI是Java Native Interface的缩写,JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。尤其是c++或是c写的com组件接口。 JNI(Java Native Interface)的书写步骤 一般...
  • java 如何调用com组件接口方法。

    千次阅读 2007-09-10 23:05:47
    要在java的话。就要用到JNI技术。JNI是Java Native Interface的缩写,JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。尤其是c++或是c写的com组件接口。 JNI(Java Native Interface)的书写步骤 一般...
  • 示例:stackoverflow.com-当图像插入到编辑器面板上并且图像太大而无法容纳在页面上时,图像将自动调整大小。#1楼我以这种方式在水平和垂直方向上将超链接内的图像按比例居中和缩放:#link {border: 1px solid blue;...
  • java使用kaptcha 验证码组件

    千次阅读 2012-07-10 17:51:45
    kaptcha工作的原理是调com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片。同时将生成的验证码字符串放到HttpSession中。 kaptcha可以方便的配置 : kaptcha.border 是否有边框 默认为true...
  • 1、GUI组件介绍 2、事件处理 3、观察者模式 1、GUI组件介绍 GUI编程(Graphic User Interface,图形用户接口) GUI的各种元素,如:容器、按钮、文本框等 1、Frame类 ...import java.awt.*; impor...
  • 初学java高手勿喷帮小弟看看那里出问题了程序是可以运行但是运行结果没有把组件调出来怎么改...初学java 高手勿喷 帮小弟看看那里出问题了 程序是可以运行 但是运行结果没有把组件调出来 怎么改package com.cg...
  • 要在Java中使用autoit, 这里有一个文件autoit4java ,它利用了JACOB 技术通过COM来访问Autoitx。这里的COM技术也就是组件对象模型技术咯,JACOB是指java com brige,也就是javacom的...该组件支持ActiveX/COM/DLL...
  • JAVA_Thinking in Java

    2011-12-02 17:58:15
    2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档...
  • Jacob java语音播报

    千次阅读 2018-01-17 11:29:17
    Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用; 所以只要有调用方法正确,你几乎可以使用java...
  • 感谢@stagebo的这篇 https://www.cnblogs.com/wyongbo/p/jnaTest.html下面是按着这篇教程一步步来所遇到的坑以及事后的总结:一:Java不能直接C#,解决办法是通过C++调用C#,流程: Java的JNI/JNA -->...
  • Java中调用AutoIt操作控件

    千次阅读 2016-10-15 11:17:28
    要在Java中使用autoit, 这里有一个文件autoit4java ,它利用了JACOB 技术通过COM来访问Autoitx。这里的COM技术也就是组件对象模型技术咯,JACOB是指java com brige,也就是javacom的...该组件支持ActiveX/COM/DLL
  • 整个底层实现依赖于Java NIO配合回函数,打造了一套Jetty特色的通信框架。NIO帮助其完成基础通信,而回则是通知下游组件进行下一步处理 二、继承体系 可以看到Connector侧的组件,继承体系还是相对...
  • 这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义...项目源码的git主页:http://git.oschina.net/zftlive/zftlive javaapk.com之前也介绍过这类的项目源码,可以点击javaapk.com首页的开发框架分类下载。
  • Java调用C#的DLL的坑

    2019-09-28 16:22:35
    下面是按着这篇教程一步步来所遇到的坑以及事后的总结: ... 一:Java不能直接C#,解决办法是通过C++调用C#,流程: Java的JNI/JNA --> C++的DLL --> C#的DLL  二:C#的DLL需要注册为COM组件,参考http...
  • java 编程入门思考

    2012-03-30 17:50:08
    2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档...
  • 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档...
  • 10.3.2 覆盖——让众口不再难 265 10.3.3 覆盖——到底调用了哪个方法 270 10.3.4 覆盖的语法不简单 272 10.3.5 更复杂的使用覆盖的情况 274 10.3.6 覆盖——不得不打开的潘多拉魔盒 276 10.3.7 使用super...
  • Java初学者入门教学

    2012-03-14 21:17:15
    2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档...
  • java 面试题 总结

    2009-09-16 08:45:34
    Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨...
  • 本地服务启动和通过广播的方式回是非常简单的。 下面介绍远程服务和通过远程回的方式通知activity的方式。 1.service定义: ...import java.util.ArrayList; import com.joyfulmath.globalsearch
  • java联想(中文)

    2008-12-29 21:07:11
    2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 127
精华内容 50
关键字:

java调com组件

java 订阅