【发布时间】:2020-04-23 18:24:18
【问题描述】:
在运行我们的应用程序时,它在以下代码行中崩溃,
*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
【问题讨论】:
-
Excel->Run 采用类似 Run(MacroName, arg1, arg2, arg3, ......) 的参数。但是在这里我们将 argVariant(其中有 2 个值)作为参数传递。所以我认为这就是问题所在。如何拆分并传递值。
-
如果您在 C++ 代码中使用了#import,那么您就不能真正跳过 try/catch 来诊断
_com_error异常。