自分のプロジェクトに自分自身で作成したエラー/ログクラスを使用していますが、自分自身をファイルに格納/ロードすることもできます。より多くのオブジェクトを扱う際に私がより簡単になるように、私はファイルストリームをこの関数に渡して、ストリームの書き込み/読み取りメンバを使用します。std :: wfstreamを参照渡しできますか?write()とread()を正しく使用できますか?
と割引:
unsigned int HError::SaveToBufferW(std::wfstream& file)
{
_ErrorSaveStruct ess = {0};
ESS.IsUNICODE = true;
ESS.ItemCount = 9999999;
file.write((wchar_t*)&ess,sizeof(_ErrorSaveStruct)/sizeof(wchar_t));
return 0;
}
をロードする:節約のために
in.open(L"XError.err",std::ios::in | std::ios::out | std::ios::binary);
:と
in.open(L"XError.err",std::ios::in | std::ios::out | std::ios::binary | std::ios::trunc);
ロード
int HError::LoadFromBufferW(std::wfstream& file)
{
_ErrorSaveStruct ess = {0};
file.read((wchar_t*)&ess,sizeof(_ErrorSaveStruct)/sizeof(wchar_t));
return 0;
}
ファイルをチェックしたところ、の空白が書かれていることがわかりました。 ユニコード文字列を読み書きすると、すべてが動作し、文字列もファイル内で読み込み可能です。
編集:ここにあなたが
struct _ErrorSaveStruct
{
unsigned int MsgSize;
unsigned int TimeSize;
unsigned int LastErrorSize;
int ItemCount;
int errState;
bool InitMsg;
bool IsUNICODE;
};
_ErrorSaveStructの定義を確認できますか?あなたのコードは実際には_ErrorSaveStructが{wchar_t data [big];}だった場合にのみ機能します。それ以外のものは、コードが動作しないようです。 –
参照渡しが問題ではない、それは動作します。バグはどこか他の場所です。 – john
@Mooning Duck:どういう意味ですか?そのサイズを2で割ることができる場合は?私はすでにそれを確認しました:sizeof(_ErrorSaveStruct == 24)。 – BeschBesch