Java 程序调用一个 C++ 类的方法
来源:互联网 发布:java同步synchronized 编辑:程序博客网 时间:2024/06/11 09:51
2,编译 JNI为 C/C++接口
编译命令:
javah –jni CTeamMgr // 这一步需要 CTeamMgr.class文件
// 生成 CTeamMgr_jni_impl.h
其中有这样的定义:
JNIEXPORT jint JNICALL Java_CTeamMgr_GetTeamMeb
(JNIEnv *, jobject, jstring, jobject, jint, jobject);
3,实现上述接口,生成动态库
创建 CTeamMgr_jni_impl.cpp,实现 CTeamMgr_jni_impl.h中的接口:
JNIEXPORT jint JNICALL Java_CTeamMgr_GetTeamMeb(
JNIEnv* jEnv, // interface pointer
jobject jObj, // "this" pointer
jstring jTeamName, // argument #1
jobject jteamMebs, // argument #2
jint jiIn, // argument #3
jobject jiOut // argument #4
)
{
jint iRlt = 0;
int iOut = 0;
std::string strTeamName;
TeamMebs teamMebs;
TeamMebs::iterator p;
// trans in data
strTeamName = jEnv->GetStringUTFChars( jTeamName,false );
iOut = jIntegerValue( jEnv, jiOut );
// 下面的代码省略
}
编译生成的动态库为:teamMgr_jni_impl.dll
4,如何在C++实现中创建一个Java对象(调用Java类的构造函数)
jclass jc = jEnv->FindClass( "TeamMeb" );
jmethodID jConstructMid = jEnv->GetMethodID( jc, "<init>", "()V"); //第三个参数为方法的sig
jobject jObj = jEnv->NewObject( jc, jConstructMid);
如果构造函数有参数,会有什么不一样呢?
下面的例子中,构造函数有一个int类性的参数
:
jclass jc = jEnv->FindClass( "TeamMeb" );
jmethodID jConstructMid = jEnv->GetMethodID( jc, "<init>", "(I)V");
jobject jObj = jEnv->NewObject( jc, jConstructMid, 100 );
如果构造函数的参数为String类型,则函数的sig为:
"(Ljava/lang/String;)V"
5,Java中简单类型(int)不能作为输出参数
如果C++方法中有一个“int&”类型的参数,在Java中就需要把这个参数定义为“Integer”类型,在实现代码中可以按照下面的方法改变输出参数的值:
jclass jci = jEnv->GetObjectClass( intObj );
jmethodID jIntConstruct = jEnv->GetMethodID( jci, "<init>", "(I)V");
jEnv->CallVoidMethod( intObj, jIntConstruct, 100 );
- Java 程序调用一个 C++ 类的方法
- C++JAVA程序调用weka聚类算法的方法
- 使用C程序调用Java类方法
- 一个小java反射程序,简单的调用方法。
- 在java中调用c程序--native方法的学习
- C++中调用C程序的方法
- C++中调用C程序的方法
- java jni 入门1 - 一个简单的从Java程序中调用C函数
- java调用c程序
- java本地方法 从java程序中调用c函数
- 《Java程序》使用递归调用的方法,写一个能够将字符串倒叙输出的函数
- PHP程序调用java类的两种方法
- 有关PHP程序调用java类的两种方法
- Java调用外部程序的方法
- java程序调用c++的实现方法
- java调用外部程序的方法
- java调用外部程序的方法
- linux C程序调用外部程序的几种方法
- sed 常用正则表达式
- Linux+Apache+C+MySQL CGI编程的一些总结
- CSS兼容性
- linux+apache+c的cgi总结2环境变量
- Mac OS Flash builder 4.7 破解方法 | 不用序列号
- Java 程序调用一个 C++ 类的方法
- WPF经典编程模式-MVVM示例讲解
- 怎样定位CPU占用率高的问题
- vmware 中Linux使用windows的文件
- poj2441 状态压缩~放置方案数
- linux+apache+c cgi总结3表单处理
- Qt5 qapplication.h: No such file or directory 问题
- 矩阵求导
- Unlock the secured PDF under Ubuntu