如何在ASP.NET中使用ActiveX

时间:2010-01-14 07:46:07

标签: c# javascript activex

我创建了一个ActiveX组件,但无法在ASP.NET中访问该ActiveX组件。它使用javascript创建activeX对象时出现“Microsoft JScript运行时错误:自动化服务器无法创建对象”错误消息。

ActiveX组件代码:

using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace FirstActiveX
{
    [Guid("465F2D2E-C638-413e-A353-01E09DC4C7ED")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    [ComVisible(true)]
    public interface IMyActiveX
    {
        [DispId(1)]
        string FirstName{ get; set;}
        [DispId(2)]
        string LastName { get; set; }
        [DispId(3)]
        string Address { get; set; }
        [DispId(4)]
        void Show();
    }

    [Guid("8975D137-9D96-492c-87AE-37D653BADE16")]
    [ProgId("FirstActiveX.MyActiveX")]
    [ClassInterface(ClassInterfaceType.None)]
    [ComDefaultInterface(typeof(IMyActiveX))]
    [ComVisible(true)]
    public class MyActiveX : IMyActiveX
    {
        #region IMyActiveX Members

        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }

        public void Show()
        {
            MessageBox.Show(string.Format("Mr. {0} {1}, Address : {2}", FirstName, LastName, Address));
        }

        #endregion
    }

}

HTML代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebActiveXTest._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<script language="javascript" type="text/javascript">

    function UseActiveX() {
        var x = new ActiveXObject("FirstActiveX.MyActiveX");
        x.FirstName = "Nirajan";
        x.LastName = "Singh";
        x.Address = "Kamothe, Navi Mumbai";
        alert(x.FirstName);
        return false;
    }

</script>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Button ID="btnShow" runat="server" Text="Show" OnClientClick="return UseActiveX();" />
    </div>
    </form>

</body>
</html>

2 个答案:

答案 0 :(得分:2)

如果使用JavaScript访问ActiveX控件,则必须将ActiveX控件安装为浏览器(仅限IE)加载项,并将权限设置为允许编写脚本。您收到的错误是因为IE中无法访问ActiveX控件。

您可以在服务器上使用ActiveX控件(在ASP.NET中),但这不常见。 ActiveX控件主要用于浏览器,但由于ActiveX控件也是COM DLL,因此可以。

我建议不要开发自己的ActiveX控件,IE安全性越来越严格,除非它是供内部使用的(即防火墙后面),大多数人(网页访问者)都会拒绝在他们的计算机上安装它。

答案 1 :(得分:1)

您可能需要注册DLL。

有关如何解决此问题的完整教程,请参阅this

regasm AClass.dll / tlb / codebase