最近のトラックバック

無料ブログはココログ

« 【LGP4】ライトの効果 | トップページ | 【D3D】LightWave3DアニメーションX出力(その後) »

【QuadrupleD】DDSDを使うと誤動作

TOpenDialog、TSaveDialogのマイコンピュータに何も表示されなくなったり、ShellExecuteがエラー終了したりする現象が起きて原因を探っていましたがやっとわかりました。

DDSDコンポーネント(DirectSound)をusesに追加すると起きるようです。今のところ再現率100%です。
ちなみに、QD付属のsx変換ツールも同じ症状が出ています。

このコンポーネントはCOMを使っているのでもしかしたらそれが原因なのかもしれません。(以前、DirectMusicのインターフェイスを自作したときもはまったし;)
COMが悪いというのではなく、DelphiがActiveXのメモリ管理を勝手に行ってしまうらしく、回避するためにユニット内でOLE形式(?)にGUIDやIIDを書き換えているようなのです。
しかし私のアタマではきちんと原因を特定できませんでした。

いずれにせよ、DDSDコンポーネントは封印することにします。

【環境】
言語 TurboDelphi2006 Explorer
OS Windows XP professional SP3
症状 TOpenDialog, TSaveDialog のマイコンピュータに何も表示されなくなる
    同上、ファイルマスクを変更しても反映しない
    ShellExecuteがエラー終了する

« 【LGP4】ライトの効果 | トップページ | 【D3D】LightWave3DアニメーションX出力(その後) »

コメント

【解決】
Quadruple D作者のSANDMAN氏に教示いただきました。

DDSD.pas 内の

CoInitializeEx(Nil, 0);

を、

CoInitializeEx(Nil, 2);

に書き換えることで正常に動作しました。
0 はマルチスレッドを意味するようで、これで初期化すると上手く動作しないようです。

・・・あ、以前作ったDirectMusicのモジュールも0で初期化してたから、もしかして・・・。

コメントを書く

(ウェブ上には掲載しません)

« 【LGP4】ライトの効果 | トップページ | 【D3D】LightWave3DアニメーションX出力(その後) »