`
renzhe20092584
  • 浏览: 10985 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

cpp调用java

ios 
阅读更多

 

 

0.引进头文件

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#include<jni.h>

#include"platform/android/jni/JniHelper.h"    //引不到JniHelper.h

#include "JniHelper.h"                                 //编译不能通过

#include<android/log.h>

 

#endif

 

1.传递两参数 string类型并且返回一个 string类型

 

包名org/play/test/、类名CaddCall

void HelloWorld::menuCloseCallback(CCObject* pSender) {
	bool isHave;
	const char* msgRet;
	JniMethodInfo minfo;
	const char* fileName = "testWei"; //产品id
	const char* imageName = "testWei";

	//包名org/play/test/、类名CaddCall
	isHave = JniHelper::getStaticMethodInfo(minfo, "org/play/test/CaddCall",
			"googlePlay",
			"(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");

	if (isHave) {
		jstring jTitle = minfo.env->NewStringUTF(fileName);
		jstring jTitle1 = minfo.env->NewStringUTF(imageName);
		jobject obj = minfo.env->CallStaticObjectMethod(minfo.classID,
				minfo.methodID, jTitle, jTitle1);

		jstring jRet = (jstring) obj;
		msgRet = (minfo.env)->GetStringUTFChars(jRet, NULL);
	}

	if (std::string(msgRet) == "1")
		CCMessageBox("1", "1");
	else
		CCMessageBox("0", "0");

}

  

启动类:继承extends Cocos2dxActivity的类

  (1)通过单例的static方法访问,启动类的非static方法

类CaddCall

CaddCall.acty:CaddCall类public  static  APlay  acty;  在xxx类onCreat...时候 CaddCall.acty = this;这个时候在static方法中就能调用xxx类的非static方法了

public static String googlePlay(final String protuctId, String imagePath) {
		CaddCall.acty.onBuyGasButtonClicked();
		return CaddCall.retResult;
	}

 

 注:通过这种方法也解决了,c++通过jni调用java的非static方法

 

(2)通过通知(Handler)访问,启动类的非static方法

 启动类

public Handler mHandler = new Handler() {//注册通知
		public void handleMessage(Message msg) {//等待对方相应这个通知
			switch (msg.what) {
			case CaddCall.SHOW_DIALOG://通知名字
				onBuyGasButtonClicked(); //调用非static方法
				break;
			}
		}
	};

 

publicstatic XXX启动类 acty;

 在启动类的onCreate 调用 CaddCall.acty = this(告诉CaddCall里的发送通知的方法,给那个类发送通知);

 

public static final int SHOW_DIALOG = 0x0001;
	public static APlay acty;
	private static Handler mHandler;//通知
	public static void init(Handler handler) {
		CaddCall.mHandler = handler;
	}
public static String googlePlay(final String protuctId, String imagePath) {
		 Message msg = mHandler.obtainMessage();//得到消息
		 msg.what = CaddCall.SHOW_DIALOG;//得到消息线路
		 msg.sendToTarget();//发送
		
		return “”;		
	}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    CPP调用JAVA函数Demo

    标题 "CPP调用JAVA函数Demo" 涉及的核心技术是C++(CPP)与Java(JAVA)之间的互操作性,这通常通过Java Native Interface(JNI)实现。JNI是Java平台标准的一部分,允许Java代码和其他语言写的代码进行交互。在这个...

    qt调用JAVA文件示例

    本文将详细讲解如何在QT项目中调用JAVA文件,以实现与Android原生系统的交互。 首先,我们需要了解QT的QAndroidJniObject类,它是QT为与Android Java层交互提供的一种工具。QAndroidJniObject允许我们在C++代码中...

    JNI 调用实例(java JNI cpp互相调用实例)

    描述:JNI 调用 c++ 互相调用实例,java JNI cpp 互相调用实例 本描述进一步强调了本文的主要内容,即通过 JNI 技术实现 Java 和 C++ 之间的互相调用操作。 标签:java JNI cpp 互相调用实例 本标签对应了本文的...

    C++调用java方式

    - `Sample2.c`和`Sample2.cpp`: 这两个文件可能是C++实现的部分,其中包含了使用JNI调用Java方法的代码。通常会包含JNI头文件,定义本地方法,以及调用Java类和方法的逻辑。 - `Sample2.class`: 这是Java编译后的...

    Delphi10.3 中通过JNI调用 Java 函数

    本文将深入探讨如何在Delphi 10.3中利用JNI(Java Native Interface)技术来调用Java的函数,实现两者之间的交互。 JNI是Java平台的一部分,它为Java代码与其他语言编写的代码提供了一个标准接口。通过JNI,开发者...

    JNI技术手册 c/c++调用java

    JNI是Java与本地代码之间沟通的桥梁,使得Java应用程序能够调用本地库中的方法,同时也支持从本地代码调用Java方法。 #### 二、Java调用C/C++ ##### 1. 制作DLL文件 **第一步:** 创建一个C/C++ DLL文件,通常是...

    c++调用java工程

    ### c++调用java工程:深入理解JNI技术 在现代软件开发中,多语言混合编程已成为常态,特别是在大型项目中,不同的编程语言被用于解决各自领域的问题,以达到最佳的性能和开发效率。C++与Java,作为两种广泛使用的...

    Qt Android 调用JAVA

    然而,有时我们需要利用Android独有的功能,比如访问系统API或使用已有的Java库,这时就需要在Qt中调用Java代码。本文将详细探讨如何在Qt for Android环境中实现Java与C++的交互。 首先,理解Qt与Java交互的基本...

    C调用java详解和源代码

    文件"C++ call java.doc"可能是包含详细步骤、示例代码或者作者的封装方法的文档,而"jni_cpp"可能是一个包含C++源代码的文件夹,这些代码展示了如何使用JNI来调用Java函数。 在实际使用中,C++调用Java的过程通常...

    aix下使用c++调用java类(包)

    首先,`testjni.cpp`是C++源文件,它包含了调用Java类的JNI函数。编写这样的源文件时,我们需要导入JNI头文件,并使用JNI提供的API来创建和操作Java对象,调用其方法。例如,`FindClass`用于查找Java类,`...

    Android Studio3.0开发JNI流程------C++调用Java以及Java调用C++,C++/Java互相调用

    创建`native-lib.cpp`文件,这里我们将实现C++调用Java的方法。首先,我们需要声明Java方法的本地方法ID,然后使用JNIEnv接口调用Java方法: ```cpp #include #include extern "C" JNIEXPORT jstring JNICALL ...

    java-Call-CPP.rar_C 调用java

    这里通常包括了对Java对象的访问,调用Java方法,以及执行特定的C/C++逻辑。 5. **编译C/C++代码**:使用合适的编译器(如GCC或Clang)将C/C++源文件编译为动态链接库。对于Android开发,这通常涉及到使用Android ...

    Java-call-C.CPP.rar_C 调用java

    这个主题涵盖了Java应用程序如何利用本地方法(通常由C或C++编写)来扩展其功能,以及C/C++如何调用Java对象和方法。 首先,我们需要理解JNI的基本概念。JNI为Java程序员提供了一个接口,让他们可以定义本地方法,...

    Cpp运行Java的class文件.zip

    Cpp运行Java的class文件,可以编译,运行需要jvm.dll 可以去掉Qt的依赖jint create_vm(JavaVM** jvm, JNIEnv** env) { JavaVMInitArgs args; JavaVMOption options[1]; args.version = JNI_VERSION_1_6; args....

    visual studio 2019下C++通过JNI调用JAVA代码

    在本文中,我们将深入探讨如何在Visual Studio 2019环境下使用C++通过Java Native Interface (JNI)来调用Java代码。JNI是Java平台的一部分,它为Java应用程序提供了与本地代码交互的能力,使得开发者可以将Java应用...

    C++调用Java接口

    本教程将详细探讨如何使用C++通过JNI(Java Native Interface)来调用Java接口。JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。下面,我们将深入讲解这个过程,并结合实际例子“CInvokJava...

    ndk开发,在c中调用java中的代码

    本篇文章将详细探讨如何在NDK开发中,从C/C++代码调用Java层的方法。 首先,我们需要了解Java本地接口(JNI),它是Java平台标准版的一部分,提供了与Java虚拟机(JVM)交互的能力,包括在Java代码中调用C/C++函数...

    JNI实现java cpp相互调用

    JNI实现java cpp相互调用,包括动态注册和静态注册两种方式,具体包含 静态方式实现: C/C++中访问Java方法 C/C++中访问Java父类的方法 C/C++中访问/修改Java变量 Java中访问C/C++方法 Java中访问/修改C/C++变量 ...

    jni C调用java示例

    本示例将讲解如何在Android Studio 2.3.3版本下,通过C语言调用Java方法。 首先,理解JNI的基本结构。在Java端,我们需要定义一个本地方法,即使用`native`关键字声明的方法。例如: ```java public class ...

Global site tag (gtag.js) - Google Analytics