我已经很多年没用过 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()));
但是我如何将它实际转换为界面?