- 258 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 20:42:13 ]
- ID3DXFileSaveObject使って、STRINGをXファイルに保存するとき、
何故か2バイト文字が変に変換されて保存されてしまいます。 たとえば、 "田中太郎 -abcd- 鈴木次郎" なら、 "\223\田\222\中\221\太\230\郎\201\ -abcd- \227\鈴\226\木\216\次\230\郎" の様な具合です。 \223は、C言語のエスケープシーケンスで8進定数のことらしいと言うことまでは分かったのですが (田は\0x93,\0x63(\223,\143)なので) '\田'とか出てきたり動作がかなり変です。 始末の悪いことにID3DXFileEnumObjectで読み込んでも元に戻りません。 何か問題の所があるのでしょうか。 char strDxTemplate[] ="xof 0303txt 0032\ntemplate ID { <60F23340-4686-472f-AA91-4D1212D26476> STRING strName; DWORD dwID;} "; std::vector<char> Buff; DWORD dwBuff = 0xff00; const char strName[] = "田中太郎 -abcd- 鈴木次郎"; LPCSTR strNameBuff = strName; LPD3DXFILE pDxf; LPD3DXFILESAVEOBJECT pDxfSaveObj; LPD3DXFILESAVEDATA pDxfIDData; D3DXFileCreate(&pDxf); pDxf->RegisterTemplates(strDxTemplate, strlen(strDxTemplate)); pDxf->CreateSaveObject("test.x", D3DXF_FILELOAD_FROMFILE, tc - _T('0'), &pDxfSaveObj); Buff.resize(Buff.size() + sizeof(strName)); memcpy(&Buff[Buff.size() - sizeof(strName)], strName, sizeof(strName)); Buff.resize(Buff.size() + sizeof(dwBuff)); memcpy(&Buff[Buff.size() - sizeof(dwBuff)], &dwBuff, sizeof(dwBuff)); pDxfSaveObj->AddDataObject(IDID, NULL, NULL, Buff.size(), &Buff[0], &pDxfIDData); pDxfSaveObj->Save(); pDxfIDData->Release(); pDxfSaveObj->Release(); pDxf->Release(); SDKのバージョンは たぶんMarch 2008 そして、std::vectorの使い方が無茶苦茶なのは気にしないでください。
|

|