java调用c++接口

作者:原创时间:2022-03-30
文档

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时自动生成的,并非手动创建的):

3、编写C++程序

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

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

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

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

// helloworld.cpp : 定义DLL应用程序的导出函数。
//
#include "stdafx.h"
#include "HelloWorld_HelloWorld.h"
#include
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:\Java\jdk1.8.0_144\include)以及win32目录下的jni_md.h文件(比如,D:\Java\jdk1.8.0_144\include\win32)都拷贝到Visual Studio\vc\include目录下即可解决该问题。然后再次右键项目名称,选择“生成”。

4、完成以上步骤后

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

5、重新编译HelloWorld.java程序

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

以上就是小编今天的分享,希望可以帮到大家。

显示全文
java调用c++ java获取绝对值 java delete java调用asmx接口 java dependency java dev java fastdfs java development java dict java fastjson java feign java divide java field java field获取值 java dockerfile java file.exists() java fileinputstream java findfirst java flatmap java dowhile java delegate java decodeuri java decode java调python java decaf java读取本地excel java读取json java dataset java规则引擎 java dataframe java表单校验 java获得当前路径 java dashboard java获取随机数 java daemon java获取随机字符串 java ctp java获取运行时间 java cssbox java获取路径