[セットトップ]cococos 2 d-x androidコンパイルiconvライブラリ

4132 ワード

参考記事:http://momowing.diandian.com/post/2013-01-16/40047183777しかし、androidでエラーが表示されるので、関数を変更します.conversion from'char const*'to'char*'[-fpermissive].....この解決方法:constを削除すればいいです.私はやはりandroidでiconvをコンパイルすることを具体的に話しましょう.
一:androidプロジェクトを新規作成し、eclipseにインポートします(知っているはずです).
二:インターネットでiconvのライブラリファイルをダウンロードします.https://dl.dropbox.com/u/99895284/iconv.zip解凍してiconvフォルダを得て、このフォルダをcocos 2 d-xのフォルダの下に入れます:図のようです
[置顶] cocos2d-x android 编译 iconv库_第1张图片
三:新しいandroidプロジェクトのjni/Androidを修正する.mkファイル、図のように:
[置顶] cocos2d-x android 编译 iconv库_第2张图片
//コンパイルされたToolsは私が新しく作ったクラスで、変換を符号化するために使用されます.つまりiconvを使用するクラスです.
四:後でコンパイルを簡単にするために、iconvというフォルダをndkディレクトリの下のsourceフォルダにコピーしました.図のように
[置顶] cocos2d-x android 编译 iconv库_第3张图片
なぜ私がここに置いたのか、私のブログを参考にすることができます.http://blog.csdn.net/cwn0812/article/details/10741275
五:プロジェクトの属性を設定する:
1): Builders -> new -> Program
2):Main->Location->Browse File System->NDKパスの下のndk-buildを選択します.cmdファイル、確認
Main->Working Directory->Browse Workspace->プロジェクトを選択して確認
3):Refresh->フックRefresh resources upon completion->Specific resourcesの選択->プロジェクトのjniフォルダの選択、OK
4):Environmentをスキップします.コンパイルするフォルダをndkディレクトリのresourceフォルダの下に置いたからです.
5):Build Options->フックduring a"Clean"、Specify working...そして選択項目のjniフォルダを選択して確定し、
具体的には上記のブログを参考にして、中に図があります.
六:完成.cleanの下のプロジェクト.図:
[置顶] cocos2d-x android 编译 iconv库_第4张图片
七:私がカプセル化したクラスTools(彼らが書いたクラスを参考にして、いくつかの修正をします)
Tools.cpp
int Tools::code_convert( char *from_charset, char *to_charset, char *inbuf, size_t inlen, char *outbuf, size_t outlen )
{
	iconv_t cd;
	char *temp = inbuf;
	char **pin = &temp;
	char **pout = &outbuf;
	memset(outbuf,0,outlen);
	cd = iconv_open(to_charset,from_charset);
	if(cd==0) return -1;
	if(iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;
	iconv_close(cd);
	return 0;
}

std::string Tools::u2a( const char *_inbuf )
{
	char *inbuf = new char[strlen(_inbuf)+1];
	strcpy(inbuf, _inbuf);

	size_t inlen = strlen(inbuf);
	char * outbuf = new char[inlen * 2 + 2];
	string strRet;
	if(code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, inlen * 2 + 2) == 0)
	{
		strRet = outbuf;
	}

	delete [] inbuf;
	delete [] outbuf;
	return strRet;
}

std::string Tools::a2u( const char *_inbuf )
{
	char *inbuf = new char[strlen(_inbuf)+1];
	strcpy(inbuf, _inbuf);

	size_t inlen = strlen(inbuf);
	char * outbuf = new char[inlen * 2 + 2];
	string strRet;
	if(code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * 2 + 2) == 0)
	{
		strRet = outbuf;
	}

	delete [] outbuf;
	delete [] inbuf;
	return strRet;
}

ハローワールドでcppで呼び出す
std::string str = Tools::a2u("     wuliao");

		CCLabelTTF* label = CCLabelTTF::create(str.c_str(),"Arial",27);
		label->setPosition(ccp(size.width/2,size.height/2));
		this->addChild(label);

本体に実行し、テストに成功しました.