调用 Office 自动化 COM API 的正确、现代的 c++ 是什么

问题描述 投票:0回答:0

我已经很多年没用过 C++ 了,也没有从 C++ 使用 COM 的经验。我已经使用 Office 互操作在 c# 中编写了一些代码来处理 Word、Excel 和 PowerPoint,但我正在努力将其移植到 c++。我找到了Office Automation Using Visual C++,这不是很有帮助。它描述了 3 种方法:

使用#import 指令(它称之为 buggy 和不鼓励)、使用 MFC 或使用纯 c++。

纯 c++代码示例非常老派,看起来至少是 15 年前编写的。它不是针对强类型接口进行编码,而是使用字符串和变体来完成所有事情。

我正在努力做到最好,即 MFC 的干净代码,但在现代 c++/winrt 环境中,使用智能指针等。例如,在 c# 中,我可以做到:

Windows.Win32.PInvoke.CLSIDFromProgIDEx("Word.Application", out Guid clsid);
Word.Application app = Windows.Win32.PInvoke.GetActiveObject(clsid, null, out object obj) as Word.Application;
app.Activate();

在 C++ 中我有:

CLSID clsid;
check_hresult(CLSIDFromProgID(L"Word.Application", &clsid));

com_ptr<::IUnknown> unk;
check_hresult(GetActiveObject(clsid, NULL, unk.put()));

但是我如何将它实际转换为界面?

c++ ms-word com ms-office office-automation
© www.soinside.com 2019 - 2024. All rights reserved.