java 如何调用com组件接口方法。

大家都知道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?jnijava类名生成扩展名为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) {

newHelloWorld().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("Helloworld!\n");

return;

}

备注:

其中的HelloWorld.h通常在jdk\include\可以先拷贝到VC安装目录下的include目录下。一劳永逸,以后可以方便使用JNI技术,全编译一下工程,如果没有出错,则此时生成动态链接库成成功。把动态链接库拷贝到HelloWorld.java所在的目录上.

 运行java HelloWorld 看结果吧.

在实际应用中比较麻烦是数据类型的转换。因为要解决java和C++数据类型互通的问题。比如java里的string 如何映射为c++里相应的字符。还希望大家一起讨论。 

相关推荐