如何编写自注册的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
如果我搞清楚我张贴结果。
答
当通过名称创建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#应该很容易。
不要使用'dotnet'作为标签 - 而是使用'.net'。标注问题时请注意提示提示 - 应避免使用名称后面的数字 2009-06-05 14:19:30