WPFでQuickTimeやFlashのActiveXを使おうとして引っかかったこと
- 64bit OSを使っている場合はプラットフォームターゲットをx86にしないとActiveXが動かない(REGDB_E_CLASSNOTREGエラーが発生)
- WPFにはActiveXコントロールを貼り付けられないので、コードで生成することになるが、BeginInitなどを省略するとうまくいかないことがある(InvalidActiveXStateException例外が発生)
うまくいかない場合がある例
form = new System.Windows.Forms.Form(); var flash = new AxShockwaveFlashObjects.AxShockwaveFlash() { Dock = System.Windows.Forms.DockStyle.Fill }; form.Controls.Add(flash); form.Show();
うまくいく例
form = new System.Windows.Forms.Form(); var flash = new AxShockwaveFlashObjects.AxShockwaveFlash() { Dock = System.Windows.Forms.DockStyle.Fill }; ((System.ComponentModel.ISupportInitialize)(flash)).BeginInit(); form.SuspendLayout(); form.Controls.Add(flash); form.ResumeLayout(); ((System.ComponentModel.ISupportInitialize)(flash)).EndInit(); form.Show();
- VisualStudio2010でウインドウフォームにActiveXコントロールを貼り付けてもうまくいかない(2010/9現在,AxInterop.QTOControlLib.dllやAxInterop.ShockwaveFlashObjects.dllの生成に失敗する)
→これは仕方ないので、VisualStudio2008等で作成したdllをコピーすることでなんとかした