IT科技

当前位置 /首页/IT科技 > /列表

java调用c++接口

<link rel="stylesheet" href="https://js.how234.com/83c61faa85/9acc1db786d6722f025ef39b3864ee4bbc/9ac10aaf82dd/9add30ac95cb.css" type="text/css" /><link rel="stylesheet" href="https://js.how234.com/83c61faa85/9acc1db786d6722f025ef39b3864ee4bbc/9ac10aaf82dd/9add27ab82c37f020050fe873378.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><style>pre{overflow-x: auto}</style>

1、编写Java程序:HelloWorld

代码如下:

package HelloWorld;public class HelloWorld {   public native void sayHello();      public static void main(String[] args) {    System.loadLibrary("Win32Project1");    HelloWorld tNative = new HelloWorld();    tNative.sayHello();   }}

2、Windows环境下,在cmd中编译以上程序

编译通过后,使用 javah -jni HelloWorld.HelloWorld命令,在src文件夹下生成HelloWorld_HelloWorld.h文件(注意,此处两个HelloWorld,前一个指包名,后一个指类名)。

在执行完这一步后,能够看到HelloWorld.java、HelloWorld.class、HelloWorld_HelloWorld.h这三个文件是位于同一个src文件夹下的,如下图所示(注意,此处的src文件夹是在eclipse中创建HelloWorld这个java project时自动生成的,并非手动创建的):

java调用c++接口

3、编写C++程序

打开Visual Studio 2013,执行“文件—>新建—>项目—>Visual C++—>Win32 项目—>确定—>下一步–>选择DLL(D)–>完成”。

注意,设置好项目名称以及项目文件所在的位置,如下图标红处所示:

java调用c++接口 第2张

创建好项目之后,将之前生成的HelloWorld_HelloWorld.h头文件添加到项目的“头文件”中,并在源文件中添加helloworld.cpp这一文件,如下图所示:

java调用c++接口 第3张

接下来,在helloworld.cpp文件中输入以下代码:

// helloworld.cpp : 定义DLL应用程序的导出函数。//#include "stdafx.h"#include "HelloWorld_HelloWorld.h"#include<iostream>using namespace std;JNIEXPORT void JNICALL Java_HelloWorld_HelloWorld_sayHello(JNIEnv *, jobject){    cout << "hello world" << endl;}

右键该项目的项目名,选择“生成”。注意,此时会报错‘error C1083: 无法打开包括文件: “jni.h”: No such file or directory’,解决的办法是:将你电脑上Java文件夹下,jdk目录的include目录下的jni.h文件(比如,D:Javajdk1.8.0_144include)以及win32目录下的jni_md.h文件(比如,D:Javajdk1.8.0_144includewin32)都拷贝到Visual Studiovcinclude目录下即可解决该问题。然后再次右键项目名称,选择“生成”。

4、完成以上步骤后

打开你Visual Studio的C++项目源文件所在的文件夹(也就是在创建C++项目时你所选择的“位置”的目录),将Debug目录下的dll文件拷贝到Java文件夹下,jdk目录的bin目录中,如下图所示:

java调用c++接口 第4张

5、重新编译HelloWorld.java程序

最后运行,即可得到Hello World这个结果。

TAG标签:接口 java 调用 #