首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用IDis补丁进行OLE交互的参数构造::Invoke

使用IDis补丁进行OLE交互的参数构造::Invoke
EN

Stack Overflow用户
提问于 2018-05-17 05:41:15
回答 1查看 234关注 0票数 2

我在反抗Microsoft关于OLE自动化的文章。据我所知,AutoWrap函数用于调用外部方法,获取/设置属性。

让我们尝试理解调用此函数的代码:

代码语言:javascript
复制
//Make it visible (i.e. app.visible = 1)
{
    //parameter preparation
    VARIANT x;
    x.vt = VT_I4;// type of parameter
    x.lVal = 1;// value

    AutoWrap(
        DISPATCH_PROPERTYPUT, // set property
        NULL, // we need no result
        pXlApp,// pointer to Excel app
        L"Visible",// "Visible" property
        1,// 1 argument passed
        x//passed argument
        );
}

我不明白的是x的结构:

  1. x.vt = VT_I4是什么?它可能表示参数的类型。当它们将数组作为参数传递时,它们会这样写:
代码语言:javascript
复制
VARIANT arr;
arr.vt = VT_ARRAY | VT_VARIANT;

看上去有点像面具。

  1. x.lVal = 1; --这意味着我们将整数1传递给可见函数。但是,对于每种类型的参数,必须使用哪些属性?我在文章中看到了"lVal“和"bstrVal”。对于数组参数,它是"parray":
代码语言:javascript
复制
VARIANT arr;
//...
arr.parray = SafeArrayCreate(VT_VARIANT, 2, sab);

如果需要调用具有多个参数(例如: MyFun(x ))的函数,则需要按相反顺序传递它们:

代码语言:javascript
复制
VARIANT x;
x.vt = VT_I4;
x.lVal = 1;

VARIANT y;
x.vt = VT_I4;
x.lVal = 2;

AutoWrap(
    DISPATCH_METHOD, NULL, pXlApp, L"MyFun", 2, y, x
    );
  1. 在哪里可以找到任何函数调用的参数构造规则?
  2. 我的调查正确吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-17 06:32:44

就某些随机方法所期望的参数而言,您将需要查看特定调用的文档,或者类型库(如果不是文档化的接口)。并认识到大多数COM对象都实现了双接口,这对于C++来说要容易得多(双重接口既允许IDispatch后期绑定,也允许与所有可用的函数调用的类型检查进行规则的早期绑定)。

VARENUM类型的文档告诉您需要为任何给定的VT_值设置变量的哪个成员。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50384050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档