gpt4 book ai didi

c++ - 使用 IDispatch::Invoke 的 OLE 交互参数构造

转载 作者:可可西里 更新时间:2023-11-01 10:32:09 25 4
gpt4 key购买 nike

我正在学习Microsoft article about OLE automation .据我了解,AutoWrap 函数用于调用外部方法、获取/设置属性。

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

//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?可能它表示参数的类型。当他们将数组作为参数传递时,他们会这样写:
VARIANT arr;
arr.vt = VT_ARRAY | VT_VARIANT;

看起来像一个位掩码。

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

如果我们需要调用一个带有多个参数的函数比如:MyFun(x y),我们需要以相反的顺序传递它们:

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. 我的调查是否正确?

最佳答案

至于某些随机方法所需的参数,您需要查看该特定调用的文档,或者如果它不是文档化的接口(interface),则需要查看类型库。并意识到大多数 COM 对象实现双接口(interface),这对 C++ 来说更容易处理(双接口(interface)允许 IDispatch 后期绑定(bind)以及常规早期绑定(bind),所有类型检查可用于任何函数调用)。

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

关于c++ - 使用 IDispatch::Invoke 的 OLE 交互参数构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50384050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com