java调用dll:Java中调用C/C++生成的DLL



、 生成C头文件

1. 编辑Main.java
public Main

{

public native getStrNum( str, strLen);

}

2. 生成头文件

按win + r打开“运行”窗口输入“cmd”打开DOS控制台窗口进入上面Main.java所在目录中输入:

javac Main.java

javah Main

两条命令完成后会生成Main.h文件


2、 生成DLL

1. 新建空工程
在VS中新建工程:Win32 Console Application取名“MakeDLL”选择空工程新建后修改工程属性:

(1) General中将“Configuration Type”改为“Dynamic Library (.dll)”;

(2) C/CGeneral中将“Additional Include Directories”添加两项:

“C:Program FilesJavajdk1.5.0_06

“C:Program FilesJavajdk1.5.0_06win32”

根据你安装JAVA路径而设置这是在C/C编译过程中要使用JAVAjni.h等文件

2. 将上面生成Main.h添加入工程


3. 新建个新文件.cpp代码如下:

# 'Main.h'

# '.h'

JNIEXPORT j JNICALL Java_Main_getStrNum(JNIEnv *env, j cls, jArray str, j strLen)

{

j *buffer = (*env).GetByteArrayElements(str, 0);

buffer[strLen] = ''; // 由于JAVA自动分配空间需要传进来串长度参数

j len = strlen((char*)buffer);

len;

}

4. 按F7编译链接生成MakeDLL.dll文件

3、 JAVADLL


在JAVA中使用上面生成DLL文件:

1. 将MakeDLL.dll复制到和使用DLLJAVA文件相同目录下

2. JAVA文件源代码:

public Main

{



{

.loadLibrary('MakeDLL');

}

public native getStrNum( str, strLen);

public void (String args)

{

Main instance = Main;

String str = String('haha');

num = instance.getStrNum(str.getBytes, str.length);

.out.prln(num);

}

}

整理总结:

  另外JAVA和DLL参数传递过程类型可以直接从JNI参数列表中获取;而元素则要通过JNIEnv来获取:

j *buffer = (*env).GetByteArrayElements(str, 0); // str是参数列表中jArray变量

同理可以获取char元素

返回时可以直接用语句返回也可以设置参数列表中变量指针来返回:

(*env).SetByteArrayRegion(Array, 0, 128, Arr);

Array是参数列表中jArray变量作为指针用来返回需要返回信息;Arr是j*类型里面存放值是要返回内容

  其它信息可以从Google或Baidu中通过查找“jni”或“javaDLL”来查阅到
Tags:  vb中调用dll java生成dll java调用cdll java调用dll

延伸阅读

最新评论

发表评论