gllj1135 2021-03-18 11:29 采纳率: 0%
浏览 9

VBScript如何传入VARIANT变量到COM接口?

我发现在vbs中传入的VARIANT参数是VT_ARRAY | VT_VARIANT,但是执行到COM接口实现函数中时,就变成了VT_BYREF|VT_VARIANT,请问是什么原因?

具体情况如下:

COM接口定义:

HRESULT NewBox([in] VARIANT min, [in] VARIANT max, [out,retval] IDispatch** ppDisp);

vbs调用:
Dim minVal(2),maxVal(2)
minVal(0) = 0
minVal(1) = 0
minVal(2) = 0
maxVal(0) = 13
maxVal(1) = 13
maxVal(2) = 10
Dim b
b = VarType(minVal)'0x200C  VT_ARRAY | VT_VARIANT
Dim box3d
Set box3d = math.NewBox(minVal,maxVal)

COM接口实现:

STDMETHODIMP CMath::NewBox(VARIANT min, VARIANT max, IDispatch** ppDisp)
{
//var.vt = VT_BYREF | VT_VARIANT      在COM接口的实现体中发现VARIANT的vt变了,和vbs调用时给定的值不一样

}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 01:03
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在.NET Framework中,当使用math.NewBox()创建一个数学对象时,VT_BYREFVT_VARIANT的组合被转换为VT_BYREF | VT_VARIANT。这是因为.NET框架将VT_BYREF视为引用类型的表示,并且在这种情况下,VT_VARIANT类型与IDispatch接口相匹配。

    然而,在Visual Basic Script (VBS)环境中,VARIANT类型的值通常用于传递给COM对象。因此,在VBS中,你需要确保你正确地将VARIANT值传递给math.NewBox()方法,以便它能够识别正确的值类型。

    如果你想要在VBS中正确地传递VARIANT值,你可以尝试以下方式:

    Dim minVal(2), maxVal(2)
    minVal(0) = 0
    minVal(1) = 0
    minVal(2) = 0
    
    maxVal(0) = 13
    maxVal(1) = 13
    maxVal(2) = 10
    
    ' 在VBS中使用VARIANT来传递值
    Dim b As Variant
    b = "0x200C" ' 或者根据你的实际值选择适当的VARIANT值
    
    Dim box3d
    Set box3d = math.NewBox(minVal, maxVal, box3d)
    
    

    请注意,上述示例中的字符串值应该替换为你实际的VARIANT值。如果VARIANT值不是有效的整数或数字,则可能无法正确传递。

    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵