多语言调用之 Java调用C/C++

1.创建一个类com.test.TestCall内容如下  package com.test;

public class TestCall {

public native String getResponse(String request);//传说中的native,调用非java方法
}
 

2.编译得到TestCall.class文件

  命令javah com.test.TestCall(如果不好使,前面执行一句set classpath=.)

  得到com_test_TestCall.h文件,内容如下  /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_test_TestCall */

#ifndef _Included_com_test_TestCall
#define _Included_com_test_TestCall
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_test_TestCall
* Method: getResponse
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_test_TestCall_getResponse
(JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

  3.新建C/C++工程,引入com_test_TestCall.h头文件  TestCall.cpp
#include "com_test_TestCall.h"
JNIEXPORT jstring JNICALL Java_com_test_TestCall_getResponse
(JNIEnv *pEnv, jobject obj, jstring jstr)
{
jstring response = pEnv->NewStringUTF("call C:");
jboolean isCpoy;
const jchar *request = pEnv->GetStringChars(jstr,&isCpoy) ;
//todo
pEnv->ReleaseStringChars(jstr,request);
return response;
}

  编译成TestCall.dll

  4.将TestCall.dll放到eclipse工程下(或者运行参数java -Djava.library.path=“dll目录”)

  完整TestCall.java  package com.test;

public class TestCall {

static

{

//dll名字

System.loadLibrary("TestCall");

}

public native String getResponse(String request);

public static void main(String[] args)

{

TestCall call = new TestCall();

String message = call.getResponse("hello");

javax.swing.JOptionPane.showMessageDialog(null, message);

}

}

  5.运行java,弹出对话框就算成功了。

  当然现在有Java Native Access这个开源项目,方便了我们的调用。

  JNA里面不需要按照com_test_XX这种格式定义头文件,只要定义一个方法接口,支持指针,非常好用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值