如何把一个string转化为一个ihtmldocument2,不要用webbrowser控件的(因为我的程序里没有,也不要有),string是一串html的代码(从数据库里取出来的)。我用下面的函数:function htmlstrtohtml(str:string):ihtmldocument2;
var hgbl: HGLOBAL;
    Stream: IStream;
    doc:ihtmldocument2;
    psi: IPersistStreamInit;
begin
  try hgbl:=GlobalAlloc(GPTR,Length(str)+1);
    if 0=hgbl then RaiseLastWin32Error;
    CopyMemory(Pointer(hgbl),PChar(str),Length(str));
    CreateStreamOnHGlobal(hgbl,True,Stream);
    (doc as IPersistStreamInit).Load(stream);
    result:=doc;
  except
  end;
end;
可是在 (doc as IPersistStreamInit).Load(stream)这句出错
究其原因,应该是doc这个ihtmldocument2对象没有实体,假如我放个Twebbrowser然后加入一句:  doc:=webbrowser1.document as ihtmldocument2;
这样可以正常运行现请问如何创建这个doc(ihtmldocument2 )?
(一定不要有Twebbrowser控件)

解决方案 »

  1.   

    就算你用MSHTML CoHTMLDocument.Create动态创建IHTMLDocument2的实例,其实本质上同创建Twebbrowser差不多的。
    只是后者要显示,成本并没有省下什么。
      

  2.   

    HTMLDocument2和Twebbrowser差多了,前者没有界面,需要的系统资源少得多
      

  3.   

    try this:
    FHtmlDoc: IHTMLDocument2;CoCreateInstance(CLASS_HTMLDocument, nil, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, FHtmlDoc);
      

  4.   

    MSHTML 与WEBBROWSER 所需资源的比较差别是有,不要简单说少得多吧。。
    它们主要差别也就在IDocHostUIHandler and IDocHostShowUI接口实现上。
    脚本引擎,Microsoft virtual machine,ActiveX Controls,插件,
    HTML文档里面用到的其它对象,在创建MSHTML组件的时候都会创建。
    它们耗资源相当重的。
    对于很简单情况下的HTML解析,比如找出网页里面链接什么,我是宁愿自己
    写代码处理HTML文本。