我想创建一个库来包装 Excel 自动化并仅公开它的一些巨大功能。我正在使用#import 机制来处理 Excel 的 COM,所以现在我有:
// EXCELAPP.H
#import "C:\\PathTo\\mso.dll" //...
#import "C:\\PathTo\\VBE6EXT.OLB" //...
#import "C:\\PathTo\\EXCEL.EXE" //...
class ExcelApp
{
public:
ExcelApp();
~ExcelApp();
void CloseExcel();
void ShowWindow();
void HideWindow();
// ...
private:
Excel::_ApplicationPtr m_app;
};
这是在一个静态库项目中,我在我的程序中使用它就很好。
问题是,我想向图书馆的用户“隐藏”它是如何实现的。未来的实施可能会发生变化。此外,在 .h 文件中进行导入会将所有 COM 接口暴露给库的用户,我不希望他们(包括我未来的自己)滥用它。
所以我想做一些类似 PImpl 成语的事情,但我至少需要前向声明 m_app,我不知道该怎么做。
那么,有没有办法转发声明像 Excel::_ApplicationPtr 这样的 _com_ptr_t 指针?还是有更好的方法来做我想做的事情?