如何编写自注册activex控件(在C#中)?

时间:2009-05-29 05:25:42

标签: .net com activex

我已经能够创建一个小的activex控件,但它需要在客户端上注册dll(使用regasm)。

如何避免此注册问题?

我正在尝试编写一个通过网络(到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

上阅读此内容

如果我搞清楚,我会发布结果。

2 个答案:

答案 0 :(得分:1)

COM对象,在按名称创建时,由存储在Windows注册表中的注册信息实例化。即使您的控件是在.NET中创建的,它也使用COM Interop来使用浏览器。没有先在用户的机器上注册它,就无法通过名称创建它。

您可以使用某种ClickOnce类型的传送系统,使得在客户端上的安装变得简单 - 但在所有情况下都必须注册。

答案 1 :(得分:1)

动态语言运行时(DLR)以及VS2010和.NET 4.0引入的互操作性进展应该会使这更容易。不需要COM互操作,无需注册等。Here's Anders Hejlsberg describing how it works

你在.NET 4.0上试过这个吗?可以使用测试版。

我不确定从浏览器访问网络摄像头的安全隐患。但是从Javascript到C#应该很容易。