Einzelnen Beitrag anzeigen

Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
295 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Vista: Turbopascal startet Win32 Exe nicht

  Alt 22. Nov 2008, 16:35
Ah, ich habe eine Kleinigkeit herausgefunden: Ich öffne die Windowsanwendung mittels FreeHeapAndExec.

Delphi-Quellcode:
Function FreeHeapAndExec( Command : String;
                          Params : String):Word;
Var
  lF : Text;
  lTimeOut : LongInt;
  OldHeapEnd,
  NewHeapEnd : Word;
  Error : Integer;
  lGetError : Boolean;

Begin
  Error:=0;
  If MemAvail<$1000 then
    Error:=8;
  If Error=0 then Begin
    {$IfDef MsDos}
    NewHeapEnd:=Seg(HeapPtr^)-PrefixSeg;
    OldHeapEnd:=Seg(HeapEnd^)-PrefixSeg;
    asm
      mov ah,4Ah
      mov bx,NewHeapEnd
      mov es,PrefixSeg
      Int 21h
      jnc @EXIT
      mov Error,ax
      @EXIT:
    End;
    If Error=0 then Begin
    {$EndIf MsDos}
      lGetError:=Pos(' DOSERROR ',' ' + UpStr(Params) + ' ') > 0;
      if lGetError then
        EraseFile(ExtractFileDir(Command) + 'DosError.Dat');
      if Pos('CONGDI',UpStr(Params)) > 0 then
        Message('vor');
      SwapVectors;
      Exec(Command,Params);
      SwapVectors;
      if Pos('CONGDI',UpStr(Params)) > 0 then
        Message('nach');
      if lGetError and (DosError = 0) then
      begin
        lTimeOut:=Ticks + 86{5 Sekunden};
        while not FileExists(ExtractFileDir(Command) + 'DosError.Dat')
          and (Ticks < lTimeOut) do
            Delay(1000);
        Assign(lF,ExtractFileDir(Command) + 'DosError.Dat');
        Reset(lF);
        If IoResult = 0 then
        begin
          ReadLn(lF,Error);
          if IoResult = 0 then ;
        end;
        Close(lF);
        if IoResult = 0 then ;
      end;
    {$IfDef MsDos}
      asm
        mov ah,4Ah
        mov bx,OldHeapEnd
        mov es,PrefixSeg
        Int 21h
        jnc @EXIT
        mov Error,ax
        @EXIT:
      End;
    End;
    {$Else MsDos}
      if Error = 0 then
        Error := DosError;
    {$EndIf MsDos}
  End;
  FreeHeapAndExec:=Error;
End;
Es klappt bei leerem Heapspeicher, später nicht mehr. Dann wird der Fehler in meiner Anwendung liegen.
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat