Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用IDispatch::Invoke为OLE交互构造参数_C++_Windows_Com_Ole - Fatal编程技术网

C++ 使用IDispatch::Invoke为OLE交互构造参数

C++ 使用IDispatch::Invoke为OLE交互构造参数,c++,windows,com,ole,C++,Windows,Com,Ole,我在挣扎。据我所知,AutoWrap函数用于调用外部方法、获取/设置属性 让我们试着理解调用此函数的代码: //使其可见(即app.visible=1) { //参数准备 变体x; x、 vt=vt_I4;//参数类型 x、 lVal=1;//值 自动包装( DISPATCH_PROPERTYPUT,//设置属性 NULL,//我们不需要结果 pXlApp,//指向Excel应用程序的指针 L“可见”、“可见”属性 1,//传递了1个参数 x//传递参数 ); } 我不明白的是x的结构: 什么

我在挣扎。据我所知,AutoWrap函数用于调用外部方法、获取/设置属性

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

//使其可见(即app.visible=1)
{
//参数准备
变体x;
x、 vt=vt_I4;//参数类型
x、 lVal=1;//值
自动包装(
DISPATCH_PROPERTYPUT,//设置属性
NULL,//我们不需要结果
pXlApp,//指向Excel应用程序的指针
L“可见”、“可见”属性
1,//传递了1个参数
x//传递参数
);
}
我不明白的是x的结构:

  • 什么是
    x.vt=vt_I4
    ?它可能表示论点的类型。当它们将数组作为参数传递时,会写入以下内容:
  • 变异arr;
    arr.vt=vt|u数组| vt|u变量;
    
    看起来有点像面具

  • x.lVal=1-这意味着我们将一个整数1传递给Visible函数。但是每种类型的参数都必须使用哪些属性呢?我在文章中看到了“lVal”和“bstrVal”。对于阵列参数,它是“阵列”:
  • 变异arr;
    //...
    arr.parray=安全阵列创建(VT_变体,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
        );
    
  • 在哪里可以找到任何函数调用的参数构造规则

  • 我的调查正确吗


  • 至于一些随机方法所期望的参数,您需要查看特定调用的文档,或者如果不是文档化的接口,则需要查看类型库。并且认识到大多数COM对象实现了C++接口更容易的双接口(双接口允许IDISPoT后期绑定,以及常规的早期绑定,用于任何函数调用的所有类型检查)。
    VARENUM类型的文档告诉您需要为任何给定的VT_uu值设置变量的哪个成员。

    &onMSDN@RomanR. 谢谢,你考虑过用进口吗?还是你被迫使用后期绑定?@xMRi我没有这方面的经验。另外,我听说,这可能会导致意外行为。