gpt4 book ai didi

c++ - 如何转发声明 _com_ptr_t 指针?

转载 作者:行者123 更新时间:2023-11-30 03:38:26 25 4
gpt4 key购买 nike

我想创建一个库来包装 Excel Automation 并仅公开其大量功能中的一部分。我正在使用 #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 接口(interface),我不希望他们(包括我 future 的自己)滥用它。

所以我想做一些类似于 PImpl 惯用语的事情,但我至少需要前向声明 m_app,但我不知道该怎么做。

那么,有没有办法像 Excel::_ApplicationPtr 一样转发声明 _com_ptr_t 指针?还是有更好的方法来完成我想做的事情?

最佳答案

如果你真的想那样做。我会创建一个没有 m_app 指针的基类。让所有的功能都是虚拟的。 (是的,这基本上是在创建一个“界面”。(称之为 CExcelApp ...)

从第一个派生一个类。在其中添加 m_app 变量并覆盖所有虚函数。您不会向您的用户公开此类。 (称它为 CExcelAppImp ... 或其他名称)

在您的基类中创建一个实例化 CExcelApp 实例的静态函数,但在实现中,它会实例化 CExcelAppImp。

class CExcelApp
{
protected:
CExcelApp(); // make your constructors protected

public:
static CExcelApp* CreateInstance();
};

// in your implementation

CExcelApp CExcelApp::CreateInstance()
{
return new CExcelAppImp();
}

这只是一种方式...

关于c++ - 如何转发声明 _com_ptr_t 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39621888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com