如何编写一个自注册的C# ActiveX控件?

3

我已经成功创建了一个小型的ActiveX控件,但是它需要在客户端注册dll(使用regasm)。

我该如何避免这个注册问题?

我正在尝试编写一个通过Web交付给IE浏览器的ActiveX控件,它将访问客户端的网络摄像头(使用DirectShow)。

这是我的简单控件:

  using System;
  using System.Runtime.InteropServices;
  namespace HelloNS
  {
      public interface IHello
      {
        string Message();
      }

      [ClassInterface(ClassInterfaceType.AutoDual)]
      public class Hello : IHello          {
        public string Message()
        {
            return "hello";
        }
      }
   }

这是我的浏览器:

<html>
<head>
  <script language="javascript">
    var x = new ActiveXObject("HelloNS.Hello");
    alert(x.Message());
  </script>
</head>
<body>
</body>
</html>

我正在阅读MSDN上的这篇文章:http://msdn.microsoft.com/en-us/library/aa751970(VS.85).aspx

如果我弄清楚了,我会发布结果。


请不要使用“dotnet”作为标签,而应改用“.net”。在标记您的问题时,请注意建议提示 - 名称后面带有数字<10的任何标签都应该避免使用。 - Joel Coehoorn
2个回答

1

按名称创建的COM对象,是由存储在Windows注册表中的注册信息实例化的。即使您的控件是在.NET中创建的,它也使用COM互操作性与浏览器进行交互。没有办法在未将其在用户计算机上注册之前通过名称创建它。

您可能可以使用某种类似ClickOnce的交付系统来简化客户端安装 - 但在所有情况下都必须进行注册。


1

随着 VS2010 和 .NET 4.0 的推出,动态语言运行时 (DLR) 和互操作性方面的进步应该使这一过程变得更加容易。不需要 COM 互操作性,也不需要注册等等。 这里是Anders Hejlsberg描述它是如何工作的

你尝试过在 .NET 4.0 上使用吗?Beta 版本已经可以下载了。

我不确定从浏览器访问摄像头的安全性问题。但从 JavaScript 到 C# 应该很容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接