如何从经典ASP中调用COM对象函数

How to call COM object function from classic ASP

本文关键字:调用 COM 对象 函数 ASP 经典      更新时间:2023-09-26

在我的经典ASP站点中,我需要调用COM对象函数。

以下是COM组件的定义:

interface IMyComponent : IDispatch
{ 
   HRESULT GetVersion([in] int, [out] double*, [out] BSTR*);
}

在服务器端,我创建组件对象并尝试调用"GetVersion"函数:

<%
    Dim app
    Set app = CreateObject("MyComponent")
    Dim someUsefulValue
    Dim version
    app.GetVersion 1, someUsefulValue, version
%>

但此代码失败,错误为"类型不匹配"。我应该如何调用此函数?

首先,请记住没有其他浏览器支持ActiveX而不是Internet Explorer,所以我会重新考虑,如果你不应该使用其他方法来解决这个问题,也许可以使用对其他浏览器更开放的其他组件。。。

Microsoft Silverlight(如果您采用.NET方式(、AdobeFlashShockwaveAir。。。

在HTML中

您的ASP页面需要具有ActiveX 的<object>代码

<OBJECT ID="myActiveX "
    CLASSID="clsid: yourControlId">
</OBJECT>

然后您就可以充当一个普通的DOM对象

var myActiveX = document.getElementById("myObject");
alert( myActiveX.GetVersion(...) );

将COM方法的第一个参数的类型更改为long,而不是int。long转换为变量类型VT_I4,而int转换为VT_int。如果内存合适的话,VBScript不会识别VT_INT,因为它不是"自动化兼容类型"(INT的大小可能不会在编译器/平台之间固定!(

尝试:

<%
    Dim app
    Set app = Server.CreateObject("MyComponent")
    Dim someUsefulValue
    Dim version
    app.GetVersion 1, someUsefulValue, version
%>

在服务器端,您应该使用server.CreateObject,而不仅仅是CreateObject因为它通常用于客户端VBScript。

确保已使用regsvr32 MyComponent.dll 安装并注册COM对象