2009-07-04 14 views
1

C#クラスをCOMに書きましたが、JavaScriptから使用できませんでした。例ActiveXObjectを使用してJavaScriptからC#Comクラスを作成する方法

[ComVisible(true)] 
[ClassInterface(ClassInterfaceType.None)] 
[ComSourceInterfaces(typeof(ICommandsEvents))] 
[ProgId("Scripting.Commands")] 
public class Commands : ICommands 
{ 
    public Commands() 
    { 

    } 
    public int CreateChannel(string channelName) 
    { 
     return 0; 
    } 

    public int GetChannelID(string channelName) 
    { 
     return CreateChannel(channelName); 
    } 

    public event ChannelEventsHandler OnChannelEvents; 
} 

[ComVisible(false)] 
public delegate void ChannelEventsHandler(string a); 

[ComVisible(true)] 
[Guid("E2147768-8BA8-400b-8602-A1FDC31E6AA5")] 
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
public interface ICommands 
{ 
    [DispId(5)] 
    int CreateChannel(string channelName); 

    [DispId(6)] 
    int GetChannelID(string channelName); 
} 

[ComVisible(true)] 
[Guid("22316373-A8DF-4ace-B48C-EA9953BD73FF")] 
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
public interface ICommandsEvents 
{ 
    [DispId(1)] 
    void OnChannelEvents(string a); 
} 

プロジェクトのプロパティの[COM相互運用機能に登録]チェックボックスをオンにしました。

私はこのようなJavaScriptからこれを作成したいとき。

var a = ActiveXObject( "Scripting.Commands");

「オートメーションサーバーでオブジェクトを作成できません」という例外が発生しています。私の間違いは何ですか?

は、この種のエラーの理由が多数あります

答えて

1

ありがとうございます。

  • を使用すると、タイプライブラリ
  • まずインターフェイス、タイプライブラリとコクラス登録が正しいレジストリをチェックするためのアセンブリレベルGuidAttributeを持っていることを確認します。
  • プロセスモニタを使用して、登録が正しく読み取られていることを確認します。
  • プロセスにデバッガを接続すると、コードにブレークポイントを追加できます。
  • C#クライアント(COMを使用しているため、PIAを作成するにはtge typelibをインポートする必要があります)は動作しますか?

しかし、あなたのクラスにはGuidAttributeがないことに気付きました。そのため、コーカスの登録は失敗します。

0

サイトがクライアントマシンの「信頼済みサイト」にあることを確認してください。

関連する問題