Google Android开发博客今天宣布,即日起开放针对Android平台的原生软件开发SDK下载。由于在SDK前面又加上了原生二字,即Native Development Kit,因此又被Google称为NDK。在此之前,Android平台的第三方应用程序均是依靠基于Java的Dalvik特制虚拟机进行开发的。原生 SDK的公布可以让开发者更加直接的接触Android系统资源,并使用传统的C或C++语言编写程序,并在程序封包文件(.apks)中直接嵌入原生库文件
SDK下载:http://developer.android.com/sdk/ndk/1.5_r1/index.html
Android总算有C/C++的SDK了
原本因为Android没有C/C++的SDK,
对Android没什么激情,
现在兴趣来哦!!!!!!!!!! ......
Google Android开发博客今天宣布,即日起开放针对Android平台的原生软件开发SDK下载。由于在SDK前面又加上了原生二字,即Native Development Kit,因此又被Google称为NDK。在此之前,Android平台的第三方应用程序均是依靠基于Java的Dalvik特制虚拟机进行开发的。原生 SDK的公布可以让开发者更加直接的接触Android系统资源,并使用传统的C或C++语言编写程序,并在程序封包文件(.apks)中直接嵌入原生库文件
SDK下载:http://developer.android.com/sdk/ndk/1.5_r1/index.html
Android总算有C/C++的SDK了
原本因为Android没有C/C++的SDK,
对Android没什么激情,
现在兴趣来哦!!!!!!!!!! ......
JNI调用可以加快JAVA的运行速度,主要是将关键的代码用C/C++ 或者mfc完成,在这里贴上我写的一段代码,有兴趣的可以参考:
头文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class cn_com_wintone_TLConnectJNI */
#ifndef _Included_cn_com_wintone_TLConnectJNI
#define _Included_cn_com_wintone_TLConnectJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: Prt
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_cn_com_wintone_TLConnectJNI_Prt
(JNIEnv *, jobject);
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_initOCRTL
(JNIEnv *envPram, jobject);
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: uninitOCRTL
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_uninitOCRTL
(JNIEnv *envPram, jobject);
/*
......
JNI调用可以加快JAVA的运行速度,主要是将关键的代码用C/C++ 或者mfc完成,在这里贴上我写的一段代码,有兴趣的可以参考:
头文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class cn_com_wintone_TLConnectJNI */
#ifndef _Included_cn_com_wintone_TLConnectJNI
#define _Included_cn_com_wintone_TLConnectJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: Prt
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_cn_com_wintone_TLConnectJNI_Prt
(JNIEnv *, jobject);
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_initOCRTL
(JNIEnv *envPram, jobject);
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: uninitOCRTL
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_uninitOCRTL
(JNIEnv *envPram, jobject);
/*
......
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
int main(void)
{
FILE *fp, *fp2;
char buf[1024*300];
fp = fopen("in.txt", "rb");
fp2 = fopen("out.txt", "wb+");
fseek(fp, 0, SEEK_END);
int iLen = ftell(fp);
cout<<"iLen: "<<iLen<<endl;
fseek(fp, 0, SEEK_SET);
fread(buf, 1, iLen, fp);
fwrite(buf, 1, iLen, fp2);
fclose(fp);
fclose(fp2);
return 0;
} ......
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
int main(void)
{
FILE *fp, *fp2;
char buf[1024*300];
fp = fopen("in.txt", "rb");
fp2 = fopen("out.txt", "wb+");
fseek(fp, 0, SEEK_END);
int iLen = ftell(fp);
cout<<"iLen: "<<iLen<<endl;
fseek(fp, 0, SEEK_SET);
fread(buf, 1, iLen, fp);
fwrite(buf, 1, iLen, fp2);
fclose(fp);
fclose(fp2);
return 0;
} ......
java环境下调用VC++编写的动态链接库文件
一,开发平台:
MyEclipse 6.0,VC++6.0
二,JNI基础知识:
JNI(java native interface),JAVA本地接口调用,目的是为了JAVA可以调用本地程序。
三,交互过程:
1,建立java类。例如,建立一个RSA加密解密的类:
package zkxx.ctais2.client.common;
public class RsaEncrypt {
/**
* @param args
*/
public native String GetKeys();
public native String Encrypt(String source,String PublicKey);
public native String Decrypt(String cipher,String PrivateKey);
static {
System.loadLibrary("RSAEncrypt");
}
public static void main(String[] args) {
}
}
2,生成C++语言的头文件:
1)注意:利用javah工具生成头文件需要注意,类的包结构,和class文件存储的路径。
例如:本地class文件存储路径:E:\lclai\lclai\src\
包结构应为:E:\lclai\lclai\src\com\org\lclai
RsaEncrypt.java应该存放在包路径下。
2)CMD命令提示符下进入E:\lclai\lclai\src\com\org\lclai路径
输入命令:javac RsaEncrypt.java
回车。
把生成的class文件拷贝到路径E:\lclai\l ......
java环境下调用VC++编写的动态链接库文件
一,开发平台:
MyEclipse 6.0,VC++6.0
二,JNI基础知识:
JNI(java native interface),JAVA本地接口调用,目的是为了JAVA可以调用本地程序。
三,交互过程:
1,建立java类。例如,建立一个RSA加密解密的类:
package zkxx.ctais2.client.common;
public class RsaEncrypt {
/**
* @param args
*/
public native String GetKeys();
public native String Encrypt(String source,String PublicKey);
public native String Decrypt(String cipher,String PrivateKey);
static {
System.loadLibrary("RSAEncrypt");
}
public static void main(String[] args) {
}
}
2,生成C++语言的头文件:
1)注意:利用javah工具生成头文件需要注意,类的包结构,和class文件存储的路径。
例如:本地class文件存储路径:E:\lclai\lclai\src\
包结构应为:E:\lclai\lclai\src\com\org\lclai
RsaEncrypt.java应该存放在包路径下。
2)CMD命令提示符下进入E:\lclai\lclai\src\com\org\lclai路径
输入命令:javac RsaEncrypt.java
回车。
把生成的class文件拷贝到路径E:\lclai\l ......
原文地址:http://dev.yesky.com/147/2356147.shtml
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技术在Java中已经比较成熟,但是在c/c++领域的发展并不顺畅,虽然很早就有人思考在C++中也加入GC的支持。现实世界就是这样的,作为一个c/c++程序员,内存泄漏是你心中永远的痛。不过好在现在有许多工具能够帮助我们验证内存泄漏的存在,找出发生问题的代码。
内存泄漏的定义
一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。以下这段小程序演示了堆内存发生泄漏的情形:
void MyFunction(int nSize)
{
c ......
原文地址:http://dev.yesky.com/147/2356147.shtml
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技术在Java中已经比较成熟,但是在c/c++领域的发展并不顺畅,虽然很早就有人思考在C++中也加入GC的支持。现实世界就是这样的,作为一个c/c++程序员,内存泄漏是你心中永远的痛。不过好在现在有许多工具能够帮助我们验证内存泄漏的存在,找出发生问题的代码。
内存泄漏的定义
一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。以下这段小程序演示了堆内存发生泄漏的情形:
void MyFunction(int nSize)
{
c ......
前两天去了家游戏公司面试c/c++,题目做的很差,回来查查才发现题目大部分来自这篇文章《高质量C++/C编程指南》,有空得好好看看。
《高质量C++/C编程指南》
http://man.chinaunix.net/develop/c&c++/c/c.htm#_Toc520633987 ......
前两天去了家游戏公司面试c/c++,题目做的很差,回来查查才发现题目大部分来自这篇文章《高质量C++/C编程指南》,有空得好好看看。
《高质量C++/C编程指南》
http://man.chinaunix.net/develop/c&c++/c/c.htm#_Toc520633987 ......