本文需要了解“异步可插协议”(Asynchronous Pluggable Protocols(APPs)),可参考http://www.cnblogs.com/volnet/archive/2008/03/28/About_Asynchronous_Pluggable_Protocols.html
下面提供的工程使用wtl,用vs2010编译。代码实现了对mt的解析、显示,但不要认为是直接从文件加载的,因为文件路径的解析、文件内容的读取都是自己编码实现的,最后显示到视图上的内容直接来源是内存,所以不要怀疑本文文不对题。
页面加载过程大致如下:
1、访问指定协议的URI,调用了插件的Start函数
2、调用objNegotiate->OnResponse(200, (LPCTSTR)responseHeaders, (LPCTSTR)responseHeaders, &newResponseHeaders);
3、调用pOIProtSink->ReportData(BSCF_LASTDATANOTIFICATION, len, len);
4、调用 插件的Read
STDMETHODIMPCMTProtoHandler::Read(void *pv, ULONGcb, ULONG *pcbRead)
,把内容读取到pv指定的地址
5、 pOIProtSink->ReportResult(0, 200, NULL);
6、如果页面中有图片,则会调用插件的
CombineUrl
函数,从而得到图片的URI
6、重复2~5的过程
附件提供源代码和编译好的exe以及测试文件,运行时把a.mt和a.jpg放到d盘根目录下。
转载于:https://blog.51cto.com/watertoeast/1352808