我正在学习基于此示例代码的C ++ PowerPoint自动化
我觉得一切都很清楚,但是当我尝试将默认模板更改为保存在磁盘上的自定义模板时,我遇到了问题。我写了以下一行:
AutoWrap(DISPATCH_METHOD, NULL, pPres, L"ApplyTheme", 1, L"D:\\template.thmx" );
这是VBA的这条工作线的复制品:
Call pptPres.ApplyTheme("D:\template.thmx")
问题是应用程序崩溃了。
修改
发现问题(愚蠢的),但修复后程序仍然崩溃。
pPres应该是Presentation的类型,而不是Presentations(它是Presentation的集合)。
现在的问题出在AutoWrap功能的这一行(上面链接中提供的完整代码)
// Make the call
hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT,
autoType, &dp, pvResult, NULL, NULL);
点击该行后,我在mlock.c的_unlock中的LeaveCriticalSection上得到未处理的异常和应用程序中断。
答案 0 :(得分:0)
从您给出的示例中,您不能将wchar_t *字符串作为要在AutoWrap中调用的函数参数传递,您需要将其打包为BSTR类型,其具有与wchar_t *不同的内存布局字符串,所以它会导致崩溃。
正确的方法是你给我们的例子:
VARIANT x;
x.vt = VT_BSTR;
x.bstrVal = SysAllocString(L"All-In-One Code Framework");
AutoWrap(DISPATCH_PROPERTYPUT, NULL, pTxtRange, L"Text", 1, x);
VariantClear(&x);