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

时间:2011-07-06 08:17:02

标签: javascript com vbscript asp-classic activex

在我的经典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
%>

但此代码失败,错误“类型不匹配”。 我该怎么称呼这个功能?

3 个答案:

答案 0 :(得分:1)

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

喜欢 Microsoft Silverlight (如果你采用.NET方式),Adobe Flash Shockwave Air ...

HTML中的

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

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

然后你只是扮演一个普通的DOM对象

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

答案 1 :(得分:0)

将COM方法的第一个参数的类型更改为long,而不是int。 Long转换为变体类型VT_I4,而int转换为VT_INT。如果内存对我有用,VBScript不会识别VT_INT,因为它不是“自动兼容类型”(int的大小可能无法在编译器/平台上修复!)

答案 2 :(得分:0)

尝试:

<%
    Dim app
    Set app = Server.CreateObject("MyComponent")

    Dim someUsefulValue
    Dim version

    app.GetVersion 1, someUsefulValue, version
%>

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

确保已使用regsvr32 MyComponent.dll

安装并注册了COM对象