运行我们的应用程序时,它在以下代码行中崩溃,*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
Run Methode仅采用VARIANT参数,没有数组。参见MSDN
Excel像所有其他VB脚本语言一样,Excel和OLE自动化只能处理安全的VARIANT数组。请检查您的SAFEARRAY是否为这种类型(SafeArrayGetVartype
)。否则,您需要将数组转置为VT_ARRAY | VT_VARIANT安全数组!