2009-08-07 24 views
1

私は小さなActiveXコントロールを構築しています。私は、ActiveXはjavascript関数を直接呼び出すことはできませんが、イベントを処理する必要があることを理解しました。したがって、私はイベントを作成しました。これはcodeprojectのコードサンプルからコピーされました。activexからjavascript関数を呼び出す

イベントは特定の状況でのみ機能するようです:イベントをすぐに呼び出すjavascript関数が呼び出されたときに機能します。

のActiveXイベント:コールの

[Guid("68BD4E0D-D7BC-4cf6-BEB7-CAB950161E79")] 
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
public interface ControlEvents 
{ 
    //Add a DispIdAttribute to any members in the source interface to specify the COM DispId. 
    [DispId(0x60020001)] 
    void OnClose(string redirectUrl); //This method will be visible from JS 
} 

例私のjavascript関数は、長い操作を実行し、イベントを発生させるだけよりも、ActiveXのメソッドを呼び出したとき、それは動作しません、ここで私が何を意味するかの例です。それは動作します:

[ComVisible(true)] 


public void Close() 
    { 
     if (OnClose != null) 
     { 
      OnClose("my test"); //Calling event that will be catched in JS 
     } 
     else 
     { 
      MessageBox.Show("No Event Attached"); //If no events are attached send message. 
     } 
    } 

失敗したコールの例:

[ComVisible(true)] 
     public void Open() 
     { 
      try 
      { 
       Start(); 
      } 
      catch (Exception e) 
      { 
       throw e; 
      } 
     } 

関数は非常に長いメソッド呼び出しを開始し、数分に1回イベントを発生させ、情報をjavascriptに戻します。

なぜ動作しないのか分かりません。何が欠けている?申し訳ありませんが、質問が明確でない場合、私が得ているエラーは明らかではないので、ちょうど尋ねると私は質問を洗練されます。

答えて

1

コードにイベントが宣言されていません。何かがあるはずです

パブリックデリゲート空白EvenHanderDelegate(文字列redirectUrl);

公開イベントEnvenHanderDelegate OnClose;

関連する問題