2012-10-02 2 views
4

Utilisez la représentation suivante de la fonction pour générer une archive Web à partir d'un fichier HTML localCréer *. MHT fichier (Web Archive)

function TLessonConstructor2.CreateMHT(const FileName : string):boolean ; 
var 
    oMSG:IMessage; 
    oConfig: IConfiguration; 
    sFileName: string; 
    Stream: _Stream; 
begin 
    //CoInitializeEx(nil, COINIT_APARTMENTTHREADED); 
    //CoInitialize(nil); 
    try 
    Result := false; 
    sFileName := ChangeFileExt(FileName, '.mht'); 
    DeleteFile(PAnsiChar(sFileName)); 
    try 
    oConfig := CoConfiguration.Create(); 
    oMSG := CoMessage.Create(); 
    oMSG.Configuration := oConfig; 
    oMSG.CreateMHTMLBody(FileName,CdoSuppressNone,'',''); 
    Stream:=oMSG.GetStream; 
    Stream.SaveToFile(sFileName,adSaveCreateOverWrite); 
    Stream.Cancel; 
    Stream.Close; 
    Result := True; 
    except 
     on E: Exception do 
     begin 
     Result := false; 
     MessageDlg(E.Message, mtError, [mbOK], 0); 
     end; 
    end; 
    finally 
    // CoUnInitialize; 
    Stream:=nil; 
    oConfig:=nil; 
    oMSG:=nil; 
    end; 
end; 

FileName - chemin complet du html.

Après avoir effectué oMSG.CreateMHTMLBody (FileName, CdoSuppressNone, '', ''); Ce fichier est verrouillé tant que le processus de base est terminé. Cependant, ce fichier doit être supprimé après le traitement.

Avez-vous une idée du problème?

+0

Vous finalisez '' oMSG' et oConfig' dans le mauvais ordre. Probablement ne fait aucune différence. –

+0

J'ai essayé de changer l'ordre, n'affecte pas – Fatum

+1

Avec le CreateMHTMLBody exige l'URL, S'assurer si local, précédé du fichier: /// –

Répondre

3

CreateMHTMLBody nécessite URL donc pour un fichier local précédé d'assurez-file: ///

CreateMHTMLBody(const URL: WideString; Flags: CdoMHTMLFlags; 
          const UserName: WideString; const Password: WideString); safecall; 
+0

'utilise CDO_TLB, ADODB_TLB;' _Stream défini dans l'unité ADODB_TLB (Active Data Objects). IMessage, IConfigurationin dans l'unité CDO_TLB (Collaboration Data Objects). Si ce n'est déjà fait, utilisez la bibliothèque de types d'importation comme suit et créez: 'CDO_TLB = C: \ WINDOWS \ system32 \ cdosys.dll' ' ADO_TLB = C: \ Program Files \ Fichiers communs \ System \ ado \ msadoxx.dll' - Numéro de version xx –

Questions connexes