多语言调用之 Java调用C/C++
2011-07-26 16:42
302 查看
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 <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这种格式定义头文件,只要定义一个方法接口,支持指针,非常好用
}
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这种格式定义头文件,只要定义一个方法接口,支持指针,非常好用
相关文章推荐
- 多语言调用之 C++ 调用 Java JNI
- JNI实现Java调用C/C++语言
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
- 异构语言交互访问 解决方案及例子(三)--利用JNA从Java调用C++
- C++ 跨语言调用 Java
- Java中调用c/c++语言出现Exception in thread "main" java.lang.UnsatisfiedLinkError: Test.testPrint(Ljava/lang/String;)V...错误
- Java语言深入学习之Java调用C/C++的过程
- Java语言深入--java调用C/C++的过程
- 多语言调用之 Java调用C/C++
- C++和Java的属性访问和方法调用 效率比较
- C/C++语言中调用 sqlite 的函数操纵数据库(3)
- java调用C/C++不能打开源文件jni.h的问题
- 图解安卓-c++开发-通过java 调用c++ jni的使用
- Java 调用 C/C++ 之 JNA 系列实战篇 —— 输出char * (六)
- java jni 调用c++库
- java调用脚本语言笔记(jython,jruby,groovy)
- Java Web 跨平台 - 使用Apache Axis2引擎发布基于Java语言的WebService并跨平台调用实例
- android-java与C++的相互调用
- 入门: 使用JNI 从C++代码中调用Java的静态方法