Java中如何调用C/C++代码
2014-06-14 22:10
267 查看
以下参考论文:“Java语言如何调用C++语言编写的本地方法”一文。可从CSDN中下载该文章,如下图所示:
![](http://img.blog.csdn.net/20140614214430343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2h1YXpob3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
方法步骤如下:
1.编写声明本地方法的Java类文件。在该类文件中,要声明本地方法,并加载本地方法的动态连接库的类文件。
例如MaxMin.java,代码如下:
![](http://img.blog.csdn.net/20140614214752421?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2h1YXpob3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2.生成该Java类文件的头文件。利用Java的编译程序命令javac和javah,对上述的MaxMin.java文件经过如下处理,即可生成相应的头文件MaxMin.h。
①编译该类文件:\jdk\bin\javac MaxMin.java;
②生成该类的头文件: \jdk\bin\javah MaxMin。
MaxMin.h内容如下图:
![](http://img.blog.csdn.net/20140614215036390?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2h1YXpob3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3.利用C++语言编写本地方法的代码文件在编写本地方法的代码时,要按照上述Java自动生成的函数声明体编写C++代码。对应的代码文件MaxMinC.c的内容如下:
![](http://img.blog.csdn.net/20140614215212015?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2h1YXpob3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
4.创建本地方法的动态连接库(DLL)利用Visual Studio 2010创建动态连接库:MaxMin.dll。
可参考VS2010中创建DLL图解一文,http://www.360doc.com/content/12/0215/14/8484669_186802727.shtml
过程为:点击“文件”,“新建”-》Win32-》输入项目名“MaxMin"->DLL即可。
然后:将自己刚创建的“MaxMin.h"加入头文件,将”MaxMin.c"加入源文件中。如下图示:
![](http://img.blog.csdn.net/20140614215923078?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2h1YXpob3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
注意:需将JDK中的include/jni.h, include/win32/jawt_md.h和include/win32/jni_md.h 3个头文件加入到VS2010安装目录的VC/include目录下。
然后点击:“生成”-》“生成MaxMin"即可在Debug目录下找到MaxMin.dll文件。
5.编写Java运行类文件,调用本地方法编写Java测试类文件MaxMinTest.java,调用动态连接库中的C++方法,代码如下:
![](http://img.blog.csdn.net/20140614220535984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2h1YXpob3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
6.编译MainMaxTest.java文件,并运行java MainMaxTest得到结果:
![](http://img.blog.csdn.net/20140614220649531?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2h1YXpob3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
注意:需将MaxMin.dll和MainMaxTest.java放在同一目录下,否则找不到动态链接库。同时,需保证jdk版本和C++的dll链接库版本一致,如都是32位或64位,否则出现如下错误.
方法步骤如下:
1.编写声明本地方法的Java类文件。在该类文件中,要声明本地方法,并加载本地方法的动态连接库的类文件。
例如MaxMin.java,代码如下:
2.生成该Java类文件的头文件。利用Java的编译程序命令javac和javah,对上述的MaxMin.java文件经过如下处理,即可生成相应的头文件MaxMin.h。
①编译该类文件:\jdk\bin\javac MaxMin.java;
②生成该类的头文件: \jdk\bin\javah MaxMin。
MaxMin.h内容如下图:
3.利用C++语言编写本地方法的代码文件在编写本地方法的代码时,要按照上述Java自动生成的函数声明体编写C++代码。对应的代码文件MaxMinC.c的内容如下:
4.创建本地方法的动态连接库(DLL)利用Visual Studio 2010创建动态连接库:MaxMin.dll。
可参考VS2010中创建DLL图解一文,http://www.360doc.com/content/12/0215/14/8484669_186802727.shtml
过程为:点击“文件”,“新建”-》Win32-》输入项目名“MaxMin"->DLL即可。
然后:将自己刚创建的“MaxMin.h"加入头文件,将”MaxMin.c"加入源文件中。如下图示:
注意:需将JDK中的include/jni.h, include/win32/jawt_md.h和include/win32/jni_md.h 3个头文件加入到VS2010安装目录的VC/include目录下。
然后点击:“生成”-》“生成MaxMin"即可在Debug目录下找到MaxMin.dll文件。
5.编写Java运行类文件,调用本地方法编写Java测试类文件MaxMinTest.java,调用动态连接库中的C++方法,代码如下:
6.编译MainMaxTest.java文件,并运行java MainMaxTest得到结果:
注意:需将MaxMin.dll和MainMaxTest.java放在同一目录下,否则找不到动态链接库。同时,需保证jdk版本和C++的dll链接库版本一致,如都是32位或64位,否则出现如下错误.
相关文章推荐
- c++代码通过JNI调用Java代码时用到的签名信息如何获取
- java程序如何调用C++代码
- 如何在c++中调用java代码
- java程序如何调用C++代码
- 如何在C++代码中访问并调用Java的成员呢?
- 如何在C++中调用C的代码
- 从 C/C++ 程序调用 Java 代码
- 如何让python调用C和C++代码
- 从 Java 代码调用 C/C++ (整理自IBM在线教程)
- linux 下python 调用C++ .so如何debug c++代码
- 如何在JAVA代码中执行 exec master..xp_cmdshell @cmd // 当作SQL语句调用就成了 或者调用 Runtime.getRuntime().exec
- 如何在C++中调用C的代码
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- JNI技术实践(1) Java调用C/C++代码
- 如何在C/C++中调用Java
- 在ruby中如何调用c、c++或java的资料
- 如何在C/C++中调用Java
- linux 下python 调用C++ .so如何debug c++代码
- 如何在C/C++中调用Java的方法
- 如何让python调用C和C++代码