大家都知道com组件的接口方法是基于windows下开发的。要在java里调的话。就要用到JNI技术。JNI是Java Native Interface的缩写,JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。尤其是c++或是c写的com组件接口。
JNI(Java Native Interface)的书写步骤 一般分为以下:
1、 编写带有native声明的方法的java类
2、 使用javac命令编译所编写的java类
3、 使用javah ?jni java类名生成扩展名为h的头文件
4、 使用C/C++实现本地方法
5、 将C/C++编写的文件生成动态连接库
写个例子来说明,最常用的还是hello world 的例子吧。
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
注意:LoadLibrary中的DLL文件名称可以随便定.只要做好的动态链接库改名成这个字符串就可以了
如果你想将一个方法声明为本地方法的话,必须将方法声明为native方法,并且不能实现。 做好该步准备以后,用javac TestNative.java生成.class.检验语法. 语法检查通过以后,用javah HelloWorld 生成.h的C头文件. 然后打开VC++6.0,新建->; 工程 ->; win32 Dynamic-Link Library .在向导中选择空工程. 把刚才javah生成的那个头文件加入工程 .然后 文件->;新建->;textFile 自己做一个.c文件.实现自己的native函数.例子如下:
1 #include
2 #include "HelloWorld.h"
3 #include
4 JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
备注:
其中的HelloWorld.h通常在 jdk\include\ 可以先拷贝到VC安装目录下的include目录下。一劳永逸,以后可以方便使用JNI技术,全编译一下工程,如果没有出错,则此时生成动态链接库成成功。把动态链接库拷贝到HelloWorld .java所在的目录上.
运行java HelloWorld 看结果吧.
在实际应用中比较麻烦是数据类型的转换。因为要解决java和C++数据类型互通的问题。比如java里的string 如何映射为c++里相应的字符。还希望大家一起讨论。
分享到:
相关推荐
接口中的方法声明需要使用`@DeclDLL`注解,指定对应的COM方法。 3. **加载COM组件**:使用`ActiveXComponent`类加载COM组件。例如: ```java ActiveXComponent excel = new ActiveXComponent("Excel.Application")...
Java调用COM+组件是一种常见的跨语言交互技术,它允许Java应用程序利用已有的COM(Component Object Model)或COM+组件,这些组件通常是用其他语言如C++或Visual Basic编写的。这种技术对于整合遗留系统或者利用...
4. **调用COM方法**:通过`ActiveXComponent`对象,你可以调用COM组件的任何方法。对于接受`VARIANT*`和`BSTR*`参数的方法,可以使用`Variant`类来封装数据。`Variant`类支持多种数据类型,包括字符串、整型、浮点型...
本篇将详细讲解如何利用Java调用WPS(金山办公软件)或PDFCreator的COM接口来实现doc到pdf的转换。我们将探讨以下知识点: 1. **什么是COM接口**: COM(Component Object Model)是微软提出的一种组件对象模型,...
在Java编程中,通过URL调用接口是一种常见的网络通信方式,尤其在Web服务和API交互中扮演着重要角色。这个项目提供了一种方法,通过URL发送请求并接收响应,然后将响应的字符串转换为JSON格式进行处理。接下来,我们...
它的主要功能是将Java方法映射到COM方法,反之亦然,使得Java能够调用COM组件的方法和属性,就像它们是原生的Java类一样。 要使用JACOB,首先需要在Java项目中引入JACOB的jar文件。然后,你需要创建一个`...
Java 调用天气接口的知识点总结 Java 调用天气接口是指使用 Java 语言来调用天气预报服务的 WebService,获取当前天气信息和天气预报数据。下面是相关知识点的总结: 1. Java 调用 WebService Java 调用 ...
利用Jacob调用AutoCAD接口绘图,实现绘制图形,不是调用Windows绘制图形界面,是真正的调用AutoCAD绘图,只是给了测试代码,具体功能自己摸索
Java远程方法调用(Remote Method Invocation,简称RMI)组件是一种关键的技术,它允许Java应用程序在不同的网络节点之间透明地调用对象的方法,仿佛这些对象都在本地进程中一样。这种技术在构建分布式系统、大型...
"java调用大漠插件的开源项目" 提到了如何利用Java来调用这类插件,而“njawin插件”则是一个关键工具,它提供了一个桥梁,使得Java代码能够与COM组件进行通信。 NJAWIN是Java调用Windows API和COM组件的开源库。这...
【Java调用C# COM方法】是指在Java应用程序中调用由C#编写的COM组件。由于Java本身不直接支持对.NET Framework中的COM组件进行调用,因此需要借助中间层来实现这一目标。通常有两种常见的方式:一是使用JNA(Java ...
java2word 是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。
1. **定义服务接口**:RPC调用始于定义一个服务接口,该接口声明了可供远程调用的方法。这些接口是客户端和服务端共享的契约,确保双方有相同的调用约定。 2. **序列化与反序列化**:由于数据需要在网络间传输,...
### Java调用C#封装的DLL方法 #### 第一种方法:Java利用JNA进行调用 **背景介绍:** 为了实现Java与C#之间的交互,一种常用的方式是通过调用C#封装的DLL文件来完成特定功能。这种方法涉及到.NET Framework与Java...
C#调用Java程序的方法 C#调用Java程序的方法是指将Java类转化成dotnet类,在C#项目直接调用。这种方法可以使得C#项目可以调用Java类的方法,从而实现C#和Java之间的交互。 在这个过程中,我们需要使用IKVM(ynamic...
JACOB利用Java本地接口(JNI)技术实现了这一功能,从而为开发者提供了对遗留COM组件的访问能力,这对于系统集成特别有用。 要使用JACOB,首先你需要下载并安装它。JACOB的最新版本可在其官方网站上获取,例如在...
Java调用AutoCAD接口是一项技术性很强的工作,它允许开发者使用Java编程语言来控制和操作AutoCAD应用程序,实现自动化绘图、数据交换等任务。在本压缩包中,"Java调AutoCAD接口.zip"提供了使用Jacob库进行这项工作的...
JNI是Java平台提供的一种接口,它允许Java代码调用本地(native)代码,也就是非Java语言编写的代码,反之亦然。在Android开发中,JNI常用于实现高性能计算、硬件访问或利用C/C++库。 要实现C语言调用Java语言的...
Java调用OCX控件是跨平台编程中的一项技术挑战,因为OCX(Object Linking and Embedding Control)是微软Windows环境下的组件对象模型(COM)控件。然而,通过第三方库如Jacob(Java和COM的桥梁),Java开发者能够在...
总之,Java调用Windows操作系统实现文本转语音并生成播放文件,涉及到JNI、COM组件、DLL编程、音频处理等多个方面,需要对Java和Windows API有深入理解。通过适当的技术选择和优化,可以创建出高效、灵活的文本转...