本文需要了解“异步可插协议”(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盘根目录下。