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をコピーすることでなんとかした