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 组件并调用 C# 编写的 DLL 文件是一种跨语言交互的技术实现。在本文中,我们将深入探讨这一技术,并提供一个完整的示例,包括源代码、DLL 文件以及必要的 JAR 包和工具。我们使用的是一种名为 Jacob ...
JACOB的核心是通过动态链接库(DLL)与COM组件交互,从而简化了Java与COM之间的通信。 **二、JACOB的使用步骤** 1. **引入JACOB库**:首先需要将JACOB的jar文件(如jacob-1.19.4.jar)添加到项目的类路径中。 2. **...
### JAVA调用C# DLL文件的关键步骤和技术细节 #### 一、C#编写COM组件 在实际工作中,可能需要在不同编程语言之间进行交互。例如,一个基于Java的应用程序可能需要调用用C#编写的DLL文件来实现某些功能。这通常...
Java调用DLL文件是软件开发中的常见需求,尤其是在Java与C/C++混合编程时。`JNative-1.3.2`是一个开源组件,专门设计用于帮助Java应用程序调用Windows平台上的DLL(动态链接库)文件,同时也支持Linux平台下的SO...
为了实现Java与C#之间的交互,一种常用的方式是通过调用C#封装的DLL文件来完成特定功能。这种方法涉及到.NET Framework与Java平台之间的互操作性问题。其中一种方案是使用Java Native Access (JNA) 来调用通过C++...
java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)
这个压缩包"OpenCV-java jar包和dll文件.zip"应该包含了这些必要组件。 2. **导入jar包**:将OpenCV的jar包添加到项目的类路径中。这可以通过IDE的设置(如Eclipse或IntelliJ IDEA)或在构建脚本(如Maven或Gradle...
6. **编译C/C++源代码为DLL**:使用C/C++编译器(如GCC或Visual C++)编译源代码,生成一个新的DLL文件,这个文件将包含Java本地方法的实现。 7. **测试与运行**:现在,Java代码已经可以调用Delphi DLL中的函数了...
Java调用OCX控件是跨平台编程中的一项技术挑战,因为OCX(Object Linking and Embedding Control)是微软Windows环境下的...在实际操作时,需要仔细处理好jar和dll文件的配置,确保Java能够正确地调用和使用COM组件。
JavaRD800.dll是Java运行时环境(JRE)的一部分,主要在32位操作系统上使用...在解决这类问题时,应采取系统性的方法,包括检查系统兼容性、确保软件完整安装、从可信源获取和注册dll文件,以及在必要时寻求专业帮助。
这些dll文件是OpenCV在Java中运行所必需的本地库,它们实现了OpenCV的底层功能。 5. **JNI(Java Native Interface)**:JNI是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。在OpenCV的Java应用中...
对于本地开发,确保`jacob.dll`位于系统PATH环境变量指定的目录下,或将其与你的可执行文件放在同一目录下,因为Java运行时需要这个库来加载COM组件。 2. **导入必要的包**:在Java源代码中,导入`com.jacob.com`包...
将这些DLL文件放在系统的`PATH`环境变量所包含的目录下,或者与Java应用程序的可执行文件放在一起,可以确保Java虚拟机在运行时能够找到并加载它们。 为了在Java项目中使用VTK,你需要在项目的类路径(classpath)...
标题中的“jar文件变成dll”指的是将Java编写的类库转换为.NET平台可使用的动态链接库(DLL)文件。在.NET框架中,DLL是共享代码的主要形式,可以在多个应用程序之间重用。Java的jar文件则包含了编译后的字节码,...
Jacob通过加载.dll文件来实现Java对COM对象的调用,因此它在Windows环境下运行,支持x64和x86两种架构。 1. **Java COM Bridge(Jacob)**:Jacob是Java开发者在Windows系统中与COM组件通信的一个重要工具。它提供...
JCOB(Java COM Bridge)也是一个用于Java与COM组件交互的库,它可以用来访问和控制COM对象,包括那些由DLL文件提供的COM服务。JCOB通过反射和JNI技术,为Java提供了与COM对象交互的能力。这意味着,即使没有原始的...
Hadoop本身是基于Java的,因此在Windows环境下运行Hadoop可能需要特定的DLL文件来支持其运行。 DLL文件的作用在于提供了一种方式,使得多个应用程序可以共享同一段代码和数据,从而减少内存占用和磁盘空间。在...
然而,随着Java技术的发展和微软对Java支持的改变,此DLL文件可能不再被最新版本的软件或系统需要。 **找不到msjava.dll的常见问题** 1. **丢失或损坏**: 当系统或应用程序尝试访问msjava.dll而找不到时,可能会...
Java 使用 JNA(Java Native Access)调用C/C++编写的第三方动态库(DLL文件)是一种常见的技术,它允许Java程序直接与本地操作系统接口交互,而无需编写JNI(Java Native Interface)代码。JNA 提供了一种相对简洁...
程序与Microsoft Windows DLL...在Windows平台上,COM组件通常是通过将DLL文件注册到系统注册表中来实现调用的。而在Linux平台上,需要手动将COM组件的相关信息写入Wine的注册表中,以便Java程序能够找到并调用该组件。