2000年8月のエントリ

XML4C を使う。この中に XMLString をローカルな文字列に変換する関数,transcode というのがあるのだが,この関数は内部で new した文字列を返す。当然後で delete しなくてはならないのだが,ここで問題が発生。XML4C のライブラリは DLL になっているので,DLL で new したメモリを exe 側で delete しなくてはならず,デバッグ版(だけ?)ではメモリ管理の不整合が起きて assertion されてしまう。

結局こんな感じで無理矢理解決。

DOMString dom_str("aaa");
const XMLCh *xml_ch = dom_str.rawBuffer();
char local_str[255];
XMLString::transcode(xml_ch, local_str, dom_str.length());

DiabloII を 3 つ買う。これで 4 つ目だ。

STL。vector::back() でコンパイルエラー。これは begin(),end() と違って iterator じゃなく reference を返すのか。

ワーカースレッドからスレッドの作成元の CDialog::UpdateData() を呼び出したりすると Assert が発生する。これは CWnd のポインタが複数スレッドでの共有を許していないからで,PostMessage とかでウィンドウハンドルを使ったメッセージ経由でやりとりすれば大丈夫。