传递com变体时运行excel marco崩溃

问题描述 投票:0回答:1

运行我们的应用程序时,它在以下代码行中崩溃,*pResult = g_pExcel->Run(Temp1,argVariant);

下面是代码。我找不到它崩溃的原因。有没有类型转换问题?

CExec::CallRunVbtFunc(BSTR MacroName,
                        SAFEARRAY** ArgVals,
                        int *pResult)
  {

      _bstr_t Temp1 (MacroName);

      CComVariant argVariant(*ArgVals);
      argVariant.vt = VT_ARRAY | VT_BSTR;

      *pResult = g_pExcel->Run(Temp1,
                               argVariant);

      return S_OK;
  }

Public Function MyTesting() As Long
    Dim aa(1) As String
    aa(0) = "aaa"
    aa(1) = "bbb"        

    TheExec.CallRunVbtFunc "Macro3", aa

    End Function

Sub Macro3(argc As String, argv As String)

    TheExec.WriteComment "Called Macro2 with args*************** "

End Sub
c++ com
1个回答
0
投票
  1. Run Methode仅采用VARIANT参数,没有数组。参见MSDN

  2. Excel像所有其他VB脚本语言一样,Excel和OLE自动化只能处理安全的VARIANT数组。请检查您的SAFEARRAY是否为这种类型(SafeArrayGetVartype)。否则,您需要将数组转置为VT_ARRAY | VT_VARIANT安全数组!

© www.soinside.com 2019 - 2024. All rights reserved.