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

发布于 2024-11-19 01:43:05 字数 450 浏览 4 评论 0原文

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

但是此代码失败,并出现错误“类型不匹配”。 我应该如何调用这个函数?

In my classic ASP site I need to call COM object function.

Here is the COM component definition:

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

In server side I create component object and try to call 'GetVersion' function:

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

    Dim someUsefulValue
    Dim version

    app.GetVersion 1, someUsefulValue, version
%>

But this code fails with error "Type mismatch".
How I should call this function?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

迎风吟唱 2024-11-26 01:43:05

首先,请记住,没有其他浏览器支持 ActiveX,而不是 Internet Explorer,因此我会重新考虑是否不应该采用其他方法来解决问题,也许使用其他更有效的组件向其他浏览器开放...

例如 Microsoft Silverlight(如果您采用 .NET 方式)、Adobe FlashShockwave空中...

HTML

您的 ASP 页面需要有 ActiveX 的 代码,

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

然后你就可以充当普通的 DOM 对象

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

first of all, keep in mind that no other browser supports ActiveX rather than Internet Explorer, so I would re-think if you shouldn't get other approach to the problem, maybe using other component that is more open to other browsers...

like Microsoft Silverlight (if you are going the .NET way), Adobe Flash, Shockwave, Air...

in HTML

Your ASP page needs to have the <object> code of your ActiveX

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

then you just act as a normal DOM object

var myActiveX = document.getElementById("myObject");
alert( myActiveX.GetVersion(...) );
忘东忘西忘不掉你 2024-11-26 01:43:05

将 COM 方法的第一个参数的类型更改为 long,而不是 int。 Long 转换为变体类型 VT_I4,而 int 转换为 VT_INT。如果我没记错的话,VBScript 无法识别 VT_INT,因为它不是“自动化兼容类型”(int 的大小可能无法跨编译器/平台固定!)

Change the type of first parameter of the COM method to long, rather than int. Long translates to the variant type VT_I4, while int translates to VT_INT. If memory serves me right, VBScript doesn't recognize VT_INT as it's not an "automation compatible type" (the size of int may not be fixed across compilers/platforms!)

陌路终见情 2024-11-26 01:43:05

尝试:

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

    Dim someUsefulValue
    Dim version

    app.GetVersion 1, someUsefulValue, version
%>

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

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

Try:

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

    Dim someUsefulValue
    Dim version

    app.GetVersion 1, someUsefulValue, version
%>

On the server side you should use Server.CreateObject, not just CreateObject as it is normally used for client side VBScript.

Make sure the COM object has been installed and registered using regsvr32 MyComponent.dll

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文