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

问题描述:

我已经能够创建一个小型的ActiveX控件,但它需要DLL注册客户端(使用regasm)。如何编写自注册的activex控件(在C#中)?

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

我正在尝试编写一个通过Web(通过IE浏览器)传递的将访问客户端摄像头(使用directshow)的ActiveX控件。

这里是我的简单的控制:

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

如果我搞清楚我张贴结果。

+0

不要使用'dotnet'作为标签 - 而是使用'.net'。标注问题时请注意提示提示 - 应避免使用名称后面的数字 2009-06-05 14:19:30

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

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

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

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

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