1

C# クラスを COM に書きましたが、JavaScript から使用できませんでした。例

[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");

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

ありがとうございました

4

2 に答える 2

1

この種のエラーには多くの理由があります。

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

しかし、あなたのクラスにはがないGuidAttributeので、コクラスの登録は失敗します。

于 2009-07-04T10:11:39.927 に答える
0

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

于 2010-09-02T14:59:10.733 に答える