如何使用ActiveXObject从JavaScript创建我的C#Com类

时间:2009-07-04 09:04:49

标签: c# javascript com com-interop

我为COM编写了C#类,但我无法从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”);

我得到“Automation Server无法创建对象”异常。我错了。

谢谢

2 个答案:

答案 0 :(得分:1)

造成这种错误的原因很多。

  • 确保您具有类型库
  • 的程序集级别GuidAttribute
  • 首先检查注册表接口,类型库和coclass注册是否正确。
  • 使用进程监视器检查正在正确读取注册。
  • 将调试器附加到进程,以便为代码添加断点。
  • C#客户端(使用COM,因此您需要导入tge typelib来创建PIA)吗?

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

答案 1 :(得分:0)

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