【发布时间】:2012-06-22 16:28:26
【问题描述】:
从我最近发布的另一个问题来看,Classic ASP 似乎无法处理 activeX 对象可能抛出的事件。
任何人都可以验证这一点,或者如果可以,我该怎么做?
【问题讨论】:
标签: asp-classic jscript
从我最近发布的另一个问题来看,Classic ASP 似乎无法处理 activeX 对象可能抛出的事件。
任何人都可以验证这一点,或者如果可以,我该怎么做?
【问题讨论】:
标签: asp-classic jscript
是否可以在 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 事件,那么这种方法将不适用。
【讨论】:
你是正确的 ASP 不能处理事件。它既没有将脚本函数连接到事件所需的 CreateObject 签名,也不支持您可能在客户端使用的 <script FOR 语法。
【讨论】: