会IE插件编程的朋友请进来帮我解决一下问题(BHO)

controstr controstr 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这个问题之前发过一次贴,但那个问题已经解决了,现在迎来另一个问题
http://topic.csdn.net/u/20080908/16/e7c6cc3f-ae78-454f-8b74-b1234d196b3f.html

问题是:
类继承接口如下,并实现了它们的方法
class ATL_NO_VTABLE CFlashFilter :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CFlashFilter, &CLSID_FlashFilter>,
public IDispatchImpl<IFlashFilter, &IID_IFlashFilter, &LIBID_AdBlockerLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IInternetProtocol,
public IInternetProtocolSink

BEGIN_COM_MAP(CFlashFilter)
COM_INTERFACE_ENTRY(IFlashFilter)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY_IID(IID_IInternetProtocol, IInternetProtocol)
COM_INTERFACE_ENTRY_IID(IID_IInternetProtocolSink, IInternetProtocolSink)
END_COM_MAP()
private:
CComPtr<IInternetProtocolSink> m_pProtocolSink;
CComPtr<IInternetBindInfo> m_pBindInfo;
CComPtr<IInternetProtocol> m_pProtocol;

在Start方法中的代码

//存储IInternetProtocol、IInternetProtocolSink
m_pProtocolSink = pOIProtSink;
if ( m_pProtocolSink == NULL )
return S_FALSE;
m_pBindInfo = pOIBindInfo;
HRESULT hr = m_pBindInfo->QueryInterface( IID_IInternetProtocol, (void**)&m_pProtocol );

ULONG Fetched;
// 获取网页地址
m_pBindInfo->GetBindString( BINDSTRING_URL, &m_pUrl, 1, &Fetched );

ReportData方法

STDMETHODIMP CFlashFilter::ReportData( DWORD grfBSCF, ULONG ulProgress, ULONG ulProgressMax) USES_CONVERSION;

// 存储网页代码
std::string ts = "";
char buf[1024] = {0};
HRESULT hr;
ULONG ReadTotal = 0;

do{
memset( buf, 0x0, sizeof(buf) );
//m_pProtocolSink->ReportResult( S_OK, S_OK, NULL ); // 调用这个正确,可以执行
hr = m_pProtocol->Read( buf, sizeof(buf)-1, &ReadTotal ); // 出错,m_pProtoc指针不是空的,这时IE也死了
std::string temp(buf);
ts += temp;
}while ( (hr != S_FALSE) && (hr != INET_E_DOWNLOAD_FAILURE) && (hr != INET_E_DATA_NOT_AVAILABLE) );
_pProtocolSink->ReportData( grfBSCF, ulProgress, ulProgressMax ); // 直接调用这个也出错,IE死掉

请问高手这个问题该怎么解决,解决了另开贴再送分
...全文
评论 14
收藏 已收藏
分享
返回顶部
controstr
ATL 3,248 成员 48,530 内容