在我的经典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 :(得分: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对象