〖JAVA经验〗JAVA技巧:多语言调用之Java调用CC

Java 调用C/C++

1.创建一个类com.test.TestCall

内容如下

package com.test;

public class TestCall {

public native String getResponse(String request);

}

2.编译得到TestCall.class文件

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

得到com_test_TestCall.h文件,内容如下

/* DO NOT EDIT THIS FILE – it is machine generated */

#include

/* 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这种格式定义头文件,只要定义一个方法接口,支持指针,非常好用。

一起交流学习请访问:Tore_m_1206686_21115_1_1.html”>http://www.shangxueba.com/sTore_m_1206686_21115_1_1.html

往往为了自己的不能失败,而处心积虑前怕狼后怕虎,

〖JAVA经验〗JAVA技巧:多语言调用之Java调用CC

相关文章:

你感兴趣的文章:

标签云: