2011-07-06 31 views
0

在我的传统ASP站点中,我需要调用COM对象函数。如何从传统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 
%> 

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

+0

你能解释一下你正在试图通过这个达到什么样的?我猜这是一款浏览器内应用,所以这看起来很奇怪。我也有兴趣知道你在哪里阅读关于“JScript”:) – jrharshath

+0

@jrharshath,我想他是在谈论从传统ASP中消费COM对象,这会让你选择VBScript或JScript作为你的语言选择 – DuckMaestro

+0

@DuckMaestro,是的,你是对的 – maxvasil

回答

1

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

微软的Silverlight(如果你打算在.NET的方式),Adobe公司的Flash 冲击波空气 ...

在HTML

你的ASP页面都需要有<object>代码的ActiveX技术

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

,那么你只是作为一个正常的DOM对象

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

如果代码是运行在服务器端,那么浏览器模型是不相关的... –

+1

他正在谈论** [ASP](http://msdn.microsoft.com/。com/en-us/library/aa286483.aspx)** ..它是服务器端.. –

+0

我认为他在谈论“JScript” - >绝对是客户端。 – jrharshath

0

变化的第一个参数的类型COM方法要长,而不是int。 Long转换为变体类型VT_I4,而int转换为VT_INT。如果没记错的话,VBScript不承认VT_INT因为它不是一个“自动化兼容类型”(int的长度可能不是固定跨编译器/平台!)

0

尝试:

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

    Dim someUsefulValue 
    Dim version 

    app.GetVersion 1, someUsefulValue, version 
%> 

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

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

+0

-1,'CreateObject'起作用,但'Server.CreateObject'是首选。 –

+0

@Cheran改说回答说,而不是需要 –