我依照http://blog.csdn.net/qsdnet/archive/2006/01/19/584402.aspx里面的文章把代码
拷到DELPHI7工程去,代码如下:use  CDO_TLB, ADODB_TLB;//(要加入cdosys.dll才有这两单元,文章里有方法)procedure TForm1.WB_SaveAs_MHT(WB: TWebBrowser; FileName: TFileName);
var
  Msg: IMessage;
  Conf: IConfiguration;
  Stream: _Stream;
  URL : widestring;
  s1,s2: WideString;
begin
  if not Assigned(WB.Document) then Exit;
  URL := WB.LocationURL;  Msg := CoMessage.Create;
  Conf := CoConfiguration.Create;
  try
    Msg.Configuration := Conf;
    s1 := '';
    s2 := '';
    Msg.CreateMHTMLBody(URL, cdoSuppressAll, s1, s2);
    Stream := Msg.GetStream;
    Stream.SaveToFile(FileName, adSaveCreateOverWrite);
  finally
    Msg := nil;
    Conf := nil;
    Stream := nil;
  end;end;编译可以正常通过,但运行到(下面的url="http://www.g.cn")
Msg.CreateMHTMLBody(URL, cdoSuppressAll, '', '')就会报"UnKnown Error"错误,
在网上查了好多的资料都没解决,所引用的单元CDO_TLB里有句话:
// DepndLst: 
//   (1) v2.0 stdole, (C:\WINNT\system32\stdole2.tlb)
//   (2) v2.5 ADODB, (C:\Program Files\Common Files\System\ado\msado25.tlb)这两个文件系统里都有,我也拷到程序的目录中去了,用RegSvr32 注册也注册不了.
查了MSDN(http://msdn.microsoft.com/en-us/library/ms527024(EXCHG.10).aspx)
里的CreateMHTMLBody接口,有下面两句:
' Reference to Microsoft ActiveX Data Objects 2.5 Library
' Reference to Microsoft CDO for Windows 2000 Library
这两个类库应该要怎么注册呢或缺少什么?系统中我已注册的DLL:
regsvr32 C:\WINNT\system32\cdosys.dll
regsvr32 C:\Program Files\Common Files\System\ado\msado15.dll (这文件要是不
注册,delphi7引入cdosys.dll,点"Create unit"会报错)请大家帮忙看下这个问题应该如何解决,先谢谢啦.弄了两天头都搞大了.如果可以解决,我会加分的。

解决方案 »

  1.   

    GOOGLE G 了好久都没查到解决的方法,郁闷。
      

  2.   


    function TDownHTML.HtmlSaveAsMHT(URL:string;FilePath:string;FileName:string):Integer;
    var
      msg:IMessage;
      conf:IConfiguration;
      stream:_Stream;
      TempFileName,Ext: string;
      TempFilePath: string;
    begin
      msg := CoMessage.Create;
      conf := CoConfiguration.Create;
      try
        try 
          msg.Configuration :=conf;
          //msg.CreateMHTMLBody(URL, cdoSuppressAll, '', '');
          msg.CreateMHTMLBody(URL,cdoSuppressAll,'domain\username','password');
          stream := msg.GetStream;
          stream.SaveToFile(NormFileName(FilePath,FileName),adSaveCreateOverWrite);
          Result:=1;
        except
          try //第一次出错,再尝试第二次保存
            msg.CreateMHTMLBody(URL,cdoSuppressNone, '', '');
            msg.GetStream.SaveToFile(NormFileName(FilePath,FileName),adSaveCreateOverWrite);
            Result:=1;
          except
            SendErrToMemo('下载文件失败! URL:' + URL);
            WriteLog('下载文件失败!' + TempFileName + '(' + URL + ')', LogFile);
            Result:=0;
          end;
        end;
      finally
        msg := nil;
        conf := nil;
        stream := nil;
        //web := nil;
      end;
    end;