当前位置: 技术问答>java相关
在JAVA里面如何调用DLL文件
来源: 互联网 发布时间:2015-08-20
本文导语: 谢谢,如果可能,请给例子 | 只能使用JNI来实现,给一个我写的小例子,仅供参考: 这是一个打印hello world的例子,打印由c的printf来完成 package mytest; public class HelloNative { //将要...
谢谢,如果可能,请给例子
|
只能使用JNI来实现,给一个我写的小例子,仅供参考:
这是一个打印hello world的例子,打印由c的printf来完成
package mytest;
public class HelloNative
{
//将要调用的打印方法声明为native,且直接加分号即可
public native static void greeting();
static
{
//这个dll是有打印函数的c编译成的
//系统在程序开始是导入它,这样才能成功
System.loadLibrary("newPrintfDll");
}
}
//主方法类
package mytest;
import mytest.*;
public class HelloNativeTest
{
public static void main(String[] args)
{
HelloNative.greeting();
}
}
成功!
注意:首先,你要将HelloNative编译成class文件,然后使用javah编译该class文件,生成.h文件(要注意路径,如果有包,要退到包名上一级来编译.h文件,否则即使dll调用成功,也会显示找不到greeting方法)
将该.h文件中的关键代码粘帖到cpp文件中(有vc向导生成一个dll的文件模版),关键代码:
JNIEXPORT void JNICALL Java_mytest_HelloNative_greeting
(JNIEnv* env, jclass cl)//稍做了修改
{
printf("asdfasdf");
}
编译成dll文件,放到如c:winntsystem32下,你的.h文件也要放到相应目录(在编译dll时放到vc98include下,还有jni.h和jni_md.h也要找到它们放入),这样就基本完成了,具体细节我无法讲得太仔细建议去看参考资料.谢谢.
这是一个打印hello world的例子,打印由c的printf来完成
package mytest;
public class HelloNative
{
//将要调用的打印方法声明为native,且直接加分号即可
public native static void greeting();
static
{
//这个dll是有打印函数的c编译成的
//系统在程序开始是导入它,这样才能成功
System.loadLibrary("newPrintfDll");
}
}
//主方法类
package mytest;
import mytest.*;
public class HelloNativeTest
{
public static void main(String[] args)
{
HelloNative.greeting();
}
}
成功!
注意:首先,你要将HelloNative编译成class文件,然后使用javah编译该class文件,生成.h文件(要注意路径,如果有包,要退到包名上一级来编译.h文件,否则即使dll调用成功,也会显示找不到greeting方法)
将该.h文件中的关键代码粘帖到cpp文件中(有vc向导生成一个dll的文件模版),关键代码:
JNIEXPORT void JNICALL Java_mytest_HelloNative_greeting
(JNIEnv* env, jclass cl)//稍做了修改
{
printf("asdfasdf");
}
编译成dll文件,放到如c:winntsystem32下,你的.h文件也要放到相应目录(在编译dll时放到vc98include下,还有jni.h和jni_md.h也要找到它们放入),这样就基本完成了,具体细节我无法讲得太仔细建议去看参考资料.谢谢.
|
我现在很忙,没时间给你详细讲,有问题给我发mail:slaner@163.com
|
java 自然语言
汗……
是哪本书上翻译的?
汗……
是哪本书上翻译的?
|
jni 方法,具体的你可以到www.IBM.com/cn/去找一下
那里有一套完整介绍JNI的书
那里有一套完整介绍JNI的书
|
调用com组件可以吗,用http://users.rcn.com/danadler/javacom/index.html