关于注册临时的可插命名空间处理器的问题?
在MFC基于对话框的应用程序中,注册"临时的可插命名空间处理器"。程序运行一切正常,现在想修改"临时的可插命名空间处理器"的名称.发现程序的执行流程不正确了(编译通过了),表现在临时的可插命名空间处理器的Start函数不执行,直接执行"临时的可插命名空间处理器"的析构函数.
代码如下:
//在对话框的初始化函数中,注册临时的可插命名空间处理器
HRESULT hr=::CoGetClassObject(CLSID_process,CLSCTX_SERVER,NULL,IID_IClassFactory,(void**)&m_pFactory);
if(SUCCEEDED(hr))
{
hr=::CoInternetGetSession(0,&m_pSession,0);
if(SUCCEEDED(hr))
{
//m_pSession->RegisterNameSpace(m_pFactory,CLSID_process,L"mytest",0,NULL,0); //监视服务
m_pSession->RegisterNameSpace(m_pFactory,CLSID_process,L"http",0,NULL,0); //监视HTTP服务
}
}
//临时的可插命名空间处理器 Cmyprocess
STDMETHODIMP Cmyprocess::Start(LPCWSTR szUrl,
IInternetProtocolSink *pOIProtSink,
IInternetBindInfo *pOIBindInfo,
DWORD grfPI, HANDLE_PTR dwReserved)
{//此处打断点
//....
}
Cmyprocess:: ~Cmyprocess()
{//此处打断点
//释放资源
}
将注册临时的可插命名空间处理器 修改为 mytest后程序的流程执行不正确了,这是为什么?
[解决办法]
http是标准MIME协议,而mytest不是,除非实现一个MIME Filter,使用mytest::协议
[解决办法]
没有要求同时实现,但是这两种过滤器的作用是不一样的。命名空间过滤器可以针对现有的任何协议名称,MIME过滤器只处理特定的协议。