专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » java调用c:多语言调用的 Java调用C/C++ »正文

java调用c:多语言调用的 Java调用C/C++

来源: 发布时间:星期三, 2008年12月24日 浏览:2次 评论:0


Java C/C
1.创建个类com.test.TestCall
内容如下
package com.test;

public TestCall {

public native String getResponse(String request);
}

2.编译得到TestCall.文件
命令javah com.test.TestCall(如果不好使前面执行 path=.)
得到com_test_TestCall.h文件内容如下
/* DO NOT EDIT THIS FILE - it is machine generated */
# <jni.h>
/* Header for com_test_TestCall */

#ndef _Included_com_test_TestCall
# _Included_com_test_TestCall
#def __cplusplus
extern "C" {
#end
/*
* Class: com_test_TestCall
* Method: getResponse
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT j JNICALL Java_com_test_TestCall_getResponse
(JNIEnv *, jobject, j);

#def __cplusplus
}
#end
#end

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

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

public TestCall {


{
//dll名字
.loadLibrary("TestCall");
}

public native String getResponse(String request);

public void (String args)
{
TestCall call = TestCall;
String message = call.getResponse("hello");
javax.swing.JOptionPane.showMessageDialog(null, message);
}
}

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

当然现在有Java Native Access这个开源项目方便了我们
JNA里面不需要按照com_test_XX这种格式定义头文件只要定义个思路方法接口支持指针非常好用

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: