Jnative java调用c/c++ dll运行出错,提示找不到方法,怎么解决啊
如;C++dll为mydll.dll。_declspec(dllexport)intadd(inta,intb){returna+b;}_declspec(dllexpo...
如;C++ dll为mydll.dll。
_declspec(dllexport) int add(int a,int b)
{
return a+b;
}
_declspec(dllexport) int subtract(int a,int b)
{
return a-b;
}
我想在Java中调用add()方法,具体怎么实现。 展开
_declspec(dllexport) int add(int a,int b)
{
return a+b;
}
_declspec(dllexport) int subtract(int a,int b)
{
return a-b;
}
我想在Java中调用add()方法,具体怎么实现。 展开
展开全部
JNI(java native interface)
关键字native
本质上是java代码调用本地动态链接库
JNI使用的工具:bin/javah.exe
测试代码:
public class Test
{
//使用static块来加载动态链接库
static {
System.loadLibrary("HelloWorld"); //不要加.dll后缀,有java系统自动判断后缀
}
public native void output();
public static void main(String[] args) {
Test test = new Test();
test.output();
/*
System.loadLibrary(HelloWorld);
//等价于
Runtime.getRuntime().loadLibrary("HelloWorld");
*/
}
}
编译好后,在命令行上用javah Test生成对应的Test.h
然后使用C/C++编写工具,使用vs2008,创建一个win32工程,生成dll文件
在这里需要配置jdk/include/目录和jdk/include/win32目录的头文件包含到vc工程(或者直接将两个头文件jni.h和jni_md.h拷贝到工程即可)
将生成的Test.h和jni.h包含到工程
JNIEXPORT void JNICALL Java_Test_output
(JNIEnv *, jobject);
并实现该函数
编译生成dll
将dll文件复制到jdk/bin目录下即可
个人的笔记来的,希望对你有帮助,那个dll文件的位置应该可以改的,我菜鸟,只知道放在jdk/bin下可以
关键字native
本质上是java代码调用本地动态链接库
JNI使用的工具:bin/javah.exe
测试代码:
public class Test
{
//使用static块来加载动态链接库
static {
System.loadLibrary("HelloWorld"); //不要加.dll后缀,有java系统自动判断后缀
}
public native void output();
public static void main(String[] args) {
Test test = new Test();
test.output();
/*
System.loadLibrary(HelloWorld);
//等价于
Runtime.getRuntime().loadLibrary("HelloWorld");
*/
}
}
编译好后,在命令行上用javah Test生成对应的Test.h
然后使用C/C++编写工具,使用vs2008,创建一个win32工程,生成dll文件
在这里需要配置jdk/include/目录和jdk/include/win32目录的头文件包含到vc工程(或者直接将两个头文件jni.h和jni_md.h拷贝到工程即可)
将生成的Test.h和jni.h包含到工程
JNIEXPORT void JNICALL Java_Test_output
(JNIEnv *, jobject);
并实现该函数
编译生成dll
将dll文件复制到jdk/bin目录下即可
个人的笔记来的,希望对你有帮助,那个dll文件的位置应该可以改的,我菜鸟,只知道放在jdk/bin下可以
追问
你能给出你的dll代码吗,
我依照你的方法试试,我弄了几天了,都不行,我从jna到jnative都没成功。
谢谢了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该这样 extern "C" __declspec(dllexport) int add(int a,int b)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-06-02
展开全部
不会出错。
追问
我在运行java时提示,找不到我方法,如add();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询