MS Visual Studio 2010 Expressでdllを作成し、C ++のfstreamライブラリを使用してバイナリデータファイル(* .mgr拡張子->私の会社のアプリケーションでのみ使用)をロードします。このファイルは、Delphiを使用している私の会社の他の誰かによって開発されたアプリで作成されています。彼は、最初の15バイトは、ファイルが作成された日付を示すいくつかの文字と、アプリのバージョンのような他のいくつかのものでなければならないと言います。
「XXXX2012」。
fstream(バイナリモード)でロードし、fstream(文字列モード)で別のファイルを書き込んだ後の結果は次のとおりです。
"[] XXXX 2 0 1 2"
最初の文字は不明な文字(長方形)であり、各文字の間にスペースがあります。最後に、31バイト幅です。実際の文字の場合は15+空白の場合は15+rect文字の場合は1=31。
その他の情報:私はC ++を使用しており、アプリ開発者はDelphiを使用しています。私はfstreamを使用しています。彼はBW.Write()関数を使用しています。(BW == Binary Writer?)彼はWindows 7を使用していますが、私はWindowsXPProfessionalを使用しています。
問題の診断を下すことができますか?
前もって感謝します
最初の編集:これらの最初のバイトをロードするC++コードを追加しています。
まず、彼はエンバカデロRadStudioXE2のDelphiXE2を使用しています。
私が知っていることから、PCharは、通常の文字(1バイト)とは対照的に2バイト幅のワイド文字(delphi 2009以降)で構成されるnullで終了する文字列です。つまり、基本的に彼はバイトではなく単語を保存しています。
mgrをロードするコードは次のとおりです。
wchar_t header[15];
DXFLIBRARY_API void loadMGR(const char* szFileName, const char* szOutput)
{
fstream file;
file.open( szFileName, ios::binary | ios::in );
if(file.is_open())
{
file.read(reinterpret_cast<char*>(header),sizeof(header));
}
file.close();
//zapis
fstream saveFile;
saveFile.open( szOutput, ios::out );
if(saveFile.is_open())
{
saveFile.write(reinterpret_cast<const char*>(header),sizeof(header));
}
saveFile.close();
}
ヘッダーには15個のwchar_tが含まれているため、30バイトを取得します。まだ調査した後、私は変換する方法がわかりません。