- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个共享基类 CMyBase,它进一步分为子类 CMyFirst 和 CMySecond。我如何为客户实现一个工厂接口(interface),这样他们就不需要知道哪个 child 是使用 CComObjects 创建的?
基本上我想做的是:
CMyBase* CFactory::Create
{
CMyBase* pInst = NULL;
if (something)
{
pInst = new CMyFirst();
}
else
{
pInst = new CMySecond();
}
return pInst;
}
但是我怎样才能创建子 COM 对象的实例呢?
CComObject<CMyBase>* CFactory::Create
{
HRESULT hr = E_FAIL;
CComObject<CMyBase>* pInst = NULL;
if (something)
{
hr = CComObject<CMyFirst>::CreateInstance(&pInst); // compiler error (see below)
}
else
{
hr = CComObject<CMySecond>::CreateInstance(&pInst); // compiler error (see below)
}
if (SUCCEEDED(hr))
{
pInst->AddRef();
}
return pInst;
}
我明白我为什么会收到这个错误,但我该怎么做呢?
error C2664: 'ATL::CComObject<Base>::CreateInstance' : cannot convert parameter 1 from 'ATL::CComObject<Base> *' to 'ATL::CComObject<Base> **'
最佳答案
先创建派生类,然后在返回前将其强制转换回基类。
一个例子:
CComObject<CMyBase>* CFactory::Create
{
HRESULT hr = E_FAIL;
CComObject<CMyBase>* pInst = NULL;
if (something)
{
CComObject<CMyFirst>* pFirst = NULL;
hr = CComObject<CMyFirst>::CreateInstance(&pFirst);
pInst = (CComObject<CMyBase>*)pFirst;
}
else
{
CComObject<CMySecond>* pSecond = NULL;
hr = CComObject<CMySecond>::CreateInstance(&pSecond);
pInst = (CComObject<CMyBase>*)pSecond;
}
if (SUCCEEDED(hr))
{
pInst->AddRef();
}
return pInst;
}
关于c++ - 使用 CComObjects 的工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23803834/
我有一个共享基类 CMyBase,它进一步分为子类 CMyFirst 和 CMySecond。我如何为客户实现一个工厂接口(interface),这样他们就不需要知道哪个 child 是使用 CCom
我正在开发 OPC(OLE 过程控制)客户端程序,使用异步回调方法使用 KepServer 从 PLC 获取数据。但是我遇到了问题: CComObject* pCOPCDataCallback;
我发现自己需要帮助。现在,我对 C++ 并不是那么陌生,但是将它与 ATL 结合起来会带来全新的困惑。无论如何,我的问题是:我(最终)设法在我的 COM 方法中将对象数组返回给 C# 调用者。但是在“
使用智能指针 CComObject 我通过调用其静态方法 CreateInstance 创建了一个 COM 对象。但是当我离开我的程序时,至少在 VS13 中,那个对象仍然在运行。这是我的代码: CC
我有一个功能良好的 C++ DLL,它有 8 个方法,供 C# 应用程序使用。所有方法都有简单的类型参数,例如 int* 和 float*,用于将信息从 C++ 代码传输到 C# 代码。 现在我用一个
由于 COM/.NET 互操作,Apple Bonjour SDK 在发布服务时似乎没有设置 TXTRecord。 简而言之,有一个用于创建文本记录的 COM 类: [ odl, uuid(8
我是一名优秀的程序员,十分优秀!