java和c++互调原则
来源:互联网 发布:leonard susskind知乎 编辑:程序博客网 时间:2024/06/13 14:05
通过这2天的研究,总结出java和c++互调原则
================================================================
1.c++调用java 首先是在vs上创建出java环境,导入java包,
得到具体类名和方法,比较简单
=================================================================
2.java调用c++ 相对比较复杂
{
一、从Java调用C++的DLL
1. 创建Java文件
创建名为TestNative的Java文件,注意包名。
package org.druze.test;
publicclass TestNative {
publicnativevoid sayHello();
publicvoid sayHello2(){
System.out.println("Say Hello From Java");
}
}
如代码所示,对于sayHello方法声明为native,这一部分将由C++的动态库来实现。
2. 生成class文件
使用javac org/druze/test/TestNative.java生成class文件
注意:执行该命令在org所在目录执行。
3. 使用javah命令生成相应的C++头文件
使用javah org.druze.test.TestNative生成名为
org_druze_test_TestNative.h的头文件
注意:执行该命令在org所在目录执行。
该头文件的内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_druze_test_TestNative */
#ifndef _Included_org_druze_test_TestNative
#define _Included_org_druze_test_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_druze_test_TestNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_druze_test_TestNative_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4. 创建C++解决方案
此处以VS2008为例。
新建一个VC++的Win32项目,选择如图所示的控制台应用程序。项目名称为NativeCode。
点击确定后,再点击下一步,出现该页面,应用程序类型选择DLL,附加选项选择DLL
5. 创建号工程之后,将org_druze_test_TestNative.h导入到工程里面,并创建名为source.cpp的源代码,内容如下:
#include"org_druze_test_TestNative.h"
#include<iostream>
using namespace std;
JNIEXPORT void JNICALL Java_org_druze_test_TestNative_sayHello(JNIEnv *env, jobject obj)
{
cout<<"Hello World!"<<endl;
}
6. 在工具->选项->项目和解决方案->VC++目录菜单中,平台选择Win32,选择“显示以下内容的目录”为“包含文件”,导入jni.h和jni_md.h的路径。
7. 编译,生成NativeCode.dll,并将其copy到环境变量PATH的路径下。
8. 修改TestNative.java
package org.druze.test;
publicclass TestNative {
publicnativevoid sayHello();
publicstaticvoid main(String[] args) {
// 加载动态连接库DLL,如果没有找到的话,则会在运行时报错
System.loadLibrary("NativeCode");
TestNative tnt = new TestNative();
tnt.sayHello();
}
publicvoid sayHello2(){
System.out.println("Say Hello From Java");
}
}
运行,显示“Hello World!”
9. 注意头文件jni.h和jni_md.h可以直接导入到工程中也可以。
10.注意NativeCode.dll必须放置在java命令能访问的路径中。
}
======================================================================
3.
21点难点在和服务器交互的部分是java语言写的,在编码的过程中需要不断的
使用java和c++互相调用,基本思路是这样的
在java里面写好c++要调用的函数,然后又javah 编译成.h文件,导入vs2008
编译外包可用的dll文件
java通过dll便能调用c++里面所有的方法,在cocos2d-x工程里面,导入java包
和dll文件,这样就能完成在pc上调试
--------------------------------------------------------------------
我们最终的目的是把cocos2d-x运行在android手机里面,android是不能支持dll
所以,我们最后必须把java调用c++的方法 编译成.h后,通过用Cygwin编译成
.so包,这样便能在android工程里面完成java和c++的互调
======================================================================
================================================================
1.c++调用java 首先是在vs上创建出java环境,导入java包,
得到具体类名和方法,比较简单
=================================================================
2.java调用c++ 相对比较复杂
{
一、从Java调用C++的DLL
1. 创建Java文件
创建名为TestNative的Java文件,注意包名。
package org.druze.test;
publicclass TestNative {
publicnativevoid sayHello();
publicvoid sayHello2(){
System.out.println("Say Hello From Java");
}
}
如代码所示,对于sayHello方法声明为native,这一部分将由C++的动态库来实现。
2. 生成class文件
使用javac org/druze/test/TestNative.java生成class文件
注意:执行该命令在org所在目录执行。
3. 使用javah命令生成相应的C++头文件
使用javah org.druze.test.TestNative生成名为
org_druze_test_TestNative.h的头文件
注意:执行该命令在org所在目录执行。
该头文件的内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_druze_test_TestNative */
#ifndef _Included_org_druze_test_TestNative
#define _Included_org_druze_test_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_druze_test_TestNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_druze_test_TestNative_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4. 创建C++解决方案
此处以VS2008为例。
新建一个VC++的Win32项目,选择如图所示的控制台应用程序。项目名称为NativeCode。
点击确定后,再点击下一步,出现该页面,应用程序类型选择DLL,附加选项选择DLL
5. 创建号工程之后,将org_druze_test_TestNative.h导入到工程里面,并创建名为source.cpp的源代码,内容如下:
#include"org_druze_test_TestNative.h"
#include<iostream>
using namespace std;
JNIEXPORT void JNICALL Java_org_druze_test_TestNative_sayHello(JNIEnv *env, jobject obj)
{
cout<<"Hello World!"<<endl;
}
6. 在工具->选项->项目和解决方案->VC++目录菜单中,平台选择Win32,选择“显示以下内容的目录”为“包含文件”,导入jni.h和jni_md.h的路径。
7. 编译,生成NativeCode.dll,并将其copy到环境变量PATH的路径下。
8. 修改TestNative.java
package org.druze.test;
publicclass TestNative {
publicnativevoid sayHello();
publicstaticvoid main(String[] args) {
// 加载动态连接库DLL,如果没有找到的话,则会在运行时报错
System.loadLibrary("NativeCode");
TestNative tnt = new TestNative();
tnt.sayHello();
}
publicvoid sayHello2(){
System.out.println("Say Hello From Java");
}
}
运行,显示“Hello World!”
9. 注意头文件jni.h和jni_md.h可以直接导入到工程中也可以。
10.注意NativeCode.dll必须放置在java命令能访问的路径中。
}
======================================================================
3.
21点难点在和服务器交互的部分是java语言写的,在编码的过程中需要不断的
使用java和c++互相调用,基本思路是这样的
在java里面写好c++要调用的函数,然后又javah 编译成.h文件,导入vs2008
编译外包可用的dll文件
java通过dll便能调用c++里面所有的方法,在cocos2d-x工程里面,导入java包
和dll文件,这样就能完成在pc上调试
--------------------------------------------------------------------
我们最终的目的是把cocos2d-x运行在android手机里面,android是不能支持dll
所以,我们最后必须把java调用c++的方法 编译成.h后,通过用Cygwin编译成
.so包,这样便能在android工程里面完成java和c++的互调
======================================================================
- java和c++互调原则
- Java基本概念和使用原则
- C/C++中同名覆盖原则和赋值兼容原则
- Java 和c 的互调
- Java异常处理的原则和忌讳
- Java 开发原则和常见错误
- (java)异常处理原理和原则
- Java设计原则和模式笔记
- java 中|| 和 && 的运算原则
- JAVA 重写和重载的原则
- Java重排序和happens-before原则
- java基础----面向对象特性和原则
- java设计模式和原则简介
- java种的设计模式和原则
- java原则
- C语言函数设计的一般原则和技巧
- C语言函数设计的一般原则和技巧
- java设计原则---开闭原则
- linux之sed用法
- Shell环境下增加Internal Command
- 自己在网上收集的一些Qt的小用法
- 26 个 jQuery使用技巧
- Java线程synchronized锁知识,生产者消费者问题
- java和c++互调原则
- POJ 2503 Babelfish
- OLE/COM 对象查看器——查看已注册控件的属性和方法(自己整理)
- C++中的多态
- 改过来了 输出素数。。。。。
- 自定义线程工厂
- Linux虚拟文件系统之文件打开(sys_open())
- 转载---js 数组Array用法
- 两块硬盘,安装window7和ubuntu双系统