com — Сбой программы на C ++ при использовании метода ApplyTheme

Я изучаю автоматизацию C ++ PowerPoint на основе этого примера кода

http://code.msdn.microsoft.com/office/CppAutomatePowerPoint-024b696c/sourcecode?fileId=52793&pathId = 1940694257

Мне все кажется ясным, но у меня проблема, когда я пытаюсь изменить шаблон по умолчанию на свой пользовательский шаблон, сохраненный на диске. Я написал следующую строку:

AutoWrap(DISPATCH_METHOD, NULL, pPres, L"ApplyTheme", 1, L"D:\\template.thmx" );

которая воспроизводит эту рабочую линию от VBA:

Call pptPres.ApplyTheme("D:\template.thmx")

Проблема в том, что на этой линии происходит сбой приложения.

Редактировать:

Нашел проблему (глупая), но все равно программа вылетает после ее исправления.

pPres должен быть типом презентации, а не презентациями (которые являются коллекцией презентаций).

Проблема теперь в этой строке в функции AutoWrap (полный код предоставлен по ссылке выше)

// Make the call
hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT,
autoType, &dp, pvResult, NULL, NULL);

После попадания в эту строку я получаю необработанное исключение и разрывы приложения на LeaveCriticalSection в _unlock в mlock.c.

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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]