【问题标题】:Is it possible to handle events from an activeX object in Classic ASP是否可以在经典 ASP 中处理来自 activeX 对象的事件
【发布时间】:2012-06-22 16:28:26
【问题描述】:

从我最近发布的另一个问题来看,Classic ASP 似乎无法处理 activeX 对象可能抛出的事件。

任何人都可以验证这一点,或者如果可以,我该怎么做?

【问题讨论】:

    标签: asp-classic jscript


    【解决方案1】:

    是否可以在 Classic ASP 中处理来自 activeX 对象的事件

    不,如果您说的是 COM 事件。
    但是,根据您所说的“事件”一词的含义,答案是“也许”。

    Create COM/ActiveXObject in C#, use from JScript, with simple event

    可以创建 COM 类/ActiveX 事物,在 JScript/Classic ASP 中对其进行实例化,并让 COM 类调用在 ASP 页面中定义的回调。这不是通过 COM 事件完成的,但它可以满足您的要求。

    ASP 代码可能如下所示:

    <script language="Javascript" runat="server">
    
    var greet = Server.CreateObject("Ionic.Greet");
    
    greet.onHello = function(arg, num) {
        Response.Write("onHello (ASP) invoked.<br/>\n");
        Response.Write("  num = " + num + "  stat=" + arg.status + "<br/>\n");
    };
    
    response = greet.Hello("ASP");
    Response.Write("response: " + response + "<br/>\n");
    Response.Write("status: " + greet.status + "<br/>\n");
    
    </script>
    

    仅当正在创建的 COM 类公开一个可以设置的属性,然后调用该属性的“默认方法”时,这才有效。像这样:

    public partial class Greet : IGreet
    {
        public Object onHello { get; set; }
    
        public String Hello(string name)
        {
            var r = FireEvent();
            return "Why, Hello, " + name + "!!!" + r;
        }
    }
    

    ...FireEvent 是这样的:

    private string FireEvent()
    {
        if (onHello == null) return " (N/A)";
        onHello
            .GetType()
            .InvokeMember
            ("",
             BindingFlags.InvokeMethod,
             null,
             onHello,
             new object [] {});
    
        return "ok";
    }
    

    显然,如果您有一个无法更改的 COM 类,并且它使用 COM 事件,那么这种方法将不适用。

    【讨论】:

    • 差不多了 - 我有一个相关的问题 - 我的 C# 知识几乎为零。我已经修改了您提到的其他答案中的代码,我怀疑我对 C# 事件处理缺乏了解让我失望了。我这样调用 FireEvent: WebClient request = new WebClient(); request.DownloadDataCompleted += new DownloadDataCompletedEventHandler(FireEvent);我已经改变了这样的方法: public void FireEvent(Object sender, DownloadDataCompletedEventArgs e) 它编译得很好,我只是无法在 ASP x.onDownloadComplete = function(){Response.Write("YEE HA"); }
    • 我认为您可能需要发布另一个问题。看起来这个新的转折需要一些额外的解释,在评论对话中很难做到。
    【解决方案2】:

    你是正确的 ASP 不能处理事件。它既没有将脚本函数连接到事件所需的 CreateObject 签名,也不支持您可能在客户端使用的 &lt;script FOR 语法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 2015-02-21
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 2017-11-16
      相关资源
      最近更新 更多