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类型库的装配级别
  • 首先检查注册表,接口、类型库和 coclass 注册是否正确。
  • 使用进程监视器检查注册是否被正确读取。
  • 将调试器附加到进程,以便您可以在代码中添加断点。
  • C# 客户端(使用 COM,因此您需要导入 tge typelib 来创建 PIA)是否有效?

但是我注意到您的班级没有GuidAttribute,因此 coclass 注册将失败。

于 2009-07-04T10:11:39.927 回答
0

确保您的站点位于客户端计算机上的“受信任站点”中。

于 2010-09-02T14:59:10.733 回答