【发布时间】:2014-03-08 01:26:56
【问题描述】:
我正在学习基于此示例代码的 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 退出,没有任何错误消息。不知道有没有办法从该行获取错误码。
-
我得到OLE错误码:0x80020006
-
用VS中的错误查找工具,意思是:未知名称。我猜你应该为函数“ApplyTheme”传递一个内置模板的名称,而不是一个文件。
-
尝试从以下位置应用内置主题时出现相同错误:C:\Program Files (x86)\Common Files\microsoft shared\THEMES12
标签: c++ com powerpoint ole office-automation