Я пытаюсь загрузить файл банка и использовать его макеты в зависимости от требований.
В VBA это примерно так:
Sub setLayout()
Call LoadDesign
ActivePresentation.Slides(1).CustomLayout = ActivePresentation.Designs(1).SlideMaster.CustomLayouts(3)
End Sub
Sub LoadDesign()
ActivePresentation.Designs.Load TemplateName:="C:\myPptTemplate.pot", Index:=1
End Sub
В C ++ я попробовал:
PowerPoint::DesignPtr my_design= my_active_presentation->Designs->Load(as_bstr(template_filename), 1);
PowerPoint::CustomLayoutsPtr my_layouts = my_design->SlideMaster->CustomLayouts;
PowerPoint::CustomLayoutPtr my_layout = my_layouts->Item(_variant_t(1));
Он отлично работает в VBA, но не в C ++.
Я не могу получить CustomLayoutPtr из my_layouts. Выдает исключение E_INVALIDARG.
Буду благодарен, если вы поделитесь какими-нибудь идеями о том, как я могу решить эту проблему.
Ref:
MSO API 2007
VS2008
Решение заключается в использовании:
long i=1;
_variant_t index(i, VT_I4);
VT_I4 4-байтовое целое число со знаком.
В 32-разрядной системе VT_INT представляет собой 32-разрядное целое число со знаком.
В 64-разрядной системе VT_INT представляет собой 64-разрядное целое число со знаком.
У меня 64-битная версия, но VT_INT все еще не работает. Может быть, некоторые внутренние проблемы.
Надеюсь, это поможет.