我有一个ATL项目,需要在其中执行各种初始化例程
CComObjectRootEx::FinalConstruct
出于演示目的,考虑以下实现:
HRESULT FinalConstruct()
{
return m_bInit ? S_OK : E_FAIL;
}
这将向调用者返回适当的HRESULT,指示对象的初始化是否成功。
然而,客户总是收到
REGDB_E_CLASSNOTREG
而不是
E_FAIL
如果失败,在尝试创建服务器时:
#include <Windows.h>
#import <finalconstructtest.dll>
int main()
{
HRESULT hr = CoInitialize(0);
{
finalconstructtestLib::IFCClassPtr p;
// Returns REGDB_E_CLASSNOTREG
hr = p.CreateInstance(__uuidof(finalconstructtestLib::FCClass));
}
CoUninitialize();
return 0;
}
当我将类上下文更改为
CLSCTX_INPROC_SERVER
但是,将正确返回预期的HRESULT:
// Returns E_FAIL
hr = p.CreateInstance(__uuidof(finalconstructtestLib::FCClass), nullptr, CLSCTX_INPROC_SERVER);
我看到了
this
张贴,在那里可以观察到类似的行为。然而,我似乎找不到类上下文影响
FinalConstruct
这是有意的,也许有记录在案吗?