[セットトップ]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のフォルダの下に入れます:図のようです
三:新しいandroidプロジェクトのjni/Androidを修正する.mkファイル、図のように:
//コンパイルされたToolsは私が新しく作ったクラスで、変換を符号化するために使用されます.つまりiconvを使用するクラスです.
四:後でコンパイルを簡単にするために、iconvというフォルダをndkディレクトリの下のsourceフォルダにコピーしました.図のように
なぜ私がここに置いたのか、私のブログを参考にすることができます.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の下のプロジェクト.図:
七:私がカプセル化したクラスTools(彼らが書いたクラスを参考にして、いくつかの修正をします)
Tools.cpp
ハローワールドでcppで呼び出す
本体に実行し、テストに成功しました.
一:androidプロジェクトを新規作成し、eclipseにインポートします(知っているはずです).
二:インターネットでiconvのライブラリファイルをダウンロードします.https://dl.dropbox.com/u/99895284/iconv.zip解凍してiconvフォルダを得て、このフォルダをcocos 2 d-xのフォルダの下に入れます:図のようです
三:新しいandroidプロジェクトのjni/Androidを修正する.mkファイル、図のように:
//コンパイルされたToolsは私が新しく作ったクラスで、変換を符号化するために使用されます.つまりiconvを使用するクラスです.
四:後でコンパイルを簡単にするために、iconvというフォルダをndkディレクトリの下のsourceフォルダにコピーしました.図のように
なぜ私がここに置いたのか、私のブログを参考にすることができます.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の下のプロジェクト.図:
七:私がカプセル化したクラス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);
本体に実行し、テストに成功しました.