我拥有多年来使用PDF,HTML文档和XBRL文档的代码。代码从IE中的BHO或Reader中的Adobe插件调用。它在ROT中注册一个名字对象,并创建一个信号事件。
我们一直在尝试从Adobe 9升级到Adobe 11,并且调试代码,它根本无法在ROT中注册名字对象。如果从Adobe 9插件调用,并且如果从BHO调用,则它可以工作。但是,只需升级到Adobe 11就足以让它无声地启动失败。
有问题的代码如下:
void CLocatorRegistration::Register( ISourceLocator* pLocator, long nKeyFile )
{
HRESULT hr;
CComPtr<IRunningObjectTable> pROT;
CComPtr<IMoniker> pmk;
CComBSTR bstrName;
// access the ROT
pROT = GetROT();
// create the moniker
pmk = CreateMoniker( nKeyFile );
// put this object in the ROT.
_ASSERTE( !m_bRegistered );
->>hr = pROT->Register( ROTFLAGS_REGISTRATIONKEEPSALIVE, pLocator, pmk, &m_dwROTCookie );
if FAILED(hr)
throw hr;
m_bRegistered = true;
// create the event and signal it, to support notification to any callers that this object
// is now available to connect to
CreateEventName( nKeyFile, bstrName );
m_hEvent.Attach( ::CreateEvent( NULL, TRUE, FALSE, bstrName ));
::SetEvent( m_hEvent );
}
突出显示的行是ROT注册,返回是S_OK。有没有人知道为什么这个方法会成功,但这个条目不能放入ROT?