Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Vista: Turbopascal startet Win32 Exe nicht (https://www.delphipraxis.net/124650-vista-turbopascal-startet-win32-exe-nicht.html)

MacGuyver 22. Nov 2008 11:36


Vista: Turbopascal startet Win32 Exe nicht
 
Moin Leute :hi:

Ich habe schon ein bisschen gesucht und nichts gefunden. Von meinem Programm in Turbopascal aus starte ich eine Delphi-Applikation durch. Unter Win98 benutze ich eine etwas andere Konstellation als unter XP. Es funktioniert unter den beiden Systemen einwandfrei. Bloß unter Vista geht das nicht. Von einer Konsole aus kann ich das Delphi-Programm starten.

Hat jemand damit Erfahrungen gesammelt?

Wer ärgert sich noch mit Borland- oder Turbopascal rum? Es gibt bestimmt noch einige Leidensgenossen, die eine alte Anwendung weiter pflegen müssen.

Stefan

BloodySmartie 22. Nov 2008 12:35

Re: Vista: Turbopascal startet Win32 Exe nicht
 
Was passiert denn wenn Du versuchst, das Delphiprogramm zu starten? Überhaupt nichts? Oder gibts ne Fehlermeldung?

Möglicherweise hat Dein TP-Programm ungenügende Rechte unter Vista.

DeddyH 22. Nov 2008 12:38

Re: Vista: Turbopascal startet Win32 Exe nicht
 
Evtl. wurde unter Vista die Konstellation unterbunden, dass 16-bittige Programme 32-bittige starten dürfen. Allerdings reine Vermutung, ich habe kein Vista und kann das deshalb nicht nachvollziehen.

Oreaden 22. Nov 2008 13:24

Re: Vista: Turbopascal startet Win32 Exe nicht
 
Zitat:

Zitat von MacGuyver
Wer ärgert sich noch mit Borland- oder Turbopascal rum?

Hallo MacGuyver,

das Orakel ist etwas ratlos, es weiss nicht, was Turbo Pascal dafür kann, wenn MicroSoft ihre Exe Formate nicht mehr unterstützt.

Ansonsten was wäre dagegen einzuwenden, das TP Programm unter Delphi zu Kompilieren, und das mit dem 32 Bit Kompiler. Dann sollte das doch gehen.

Schöne Grüße
aus Delphi

MacGuyver 22. Nov 2008 14:54

Re: Vista: Turbopascal startet Win32 Exe nicht
 
Es passiert einfach nichts. Weder eine Meldung noch eine Fehlercode von der Delphi-Anwendung.

Zitat:

Ansonsten was wäre dagegen einzuwenden, das TP Programm unter Delphi zu Kompilieren, und das mit dem 32 Bit Kompiler. Dann sollte das doch gehen.
:shock:
:gruebel:
Das geht?

MacGuyver 22. Nov 2008 15:35

Re: Vista: Turbopascal startet Win32 Exe nicht
 
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.

Oreaden 22. Nov 2008 15:41

Re: Vista: Turbopascal startet Win32 Exe nicht
 
Zitat:

Zitat von MacGuyver
Es passiert einfach nichts. Weder eine Meldung noch eine Fehlercode von der Delphi-Anwendung.

Zitat:

Ansonsten was wäre dagegen einzuwenden, das TP Programm unter Delphi zu Kompilieren, und das mit dem 32 Bit Kompiler. Dann sollte das doch gehen.
:shock:
:gruebel:
Das geht?

Ja das geht. du musst nur die Ein-/Ausgaben überarbeiten, da neu die Konsole nicht mehr direkt ansprechbar ist, ausserdem musst du betriebssystemspezifische Aufrufe überarbeiten.

Deine unten gequotedete Funktion kannst Du gegen "ShellExecute" ersetzen. Wird von Windows bereitgestellt. Die ganzen INT 21h aufrufe gibt es natürlich auch nicht mehr und wären gegen neuere Systemfunktionen zu ersetzen.

Wenn ich mir deine Funktion so ansehe, denke ich fast, eine Portierung nach Delphi wäre einfacher und schneller, als den Fehler zu suchen.

Schöne Grüße
aus Delphi

MacGuyver 22. Nov 2008 15:55

Re: Vista: Turbopascal startet Win32 Exe nicht
 
Ja, da bin ich bei. Ich binde erst das DOS-Programm in ein Fenster in meiner Delphi-Anwendung ein und rufe die Teile passend auf. Dann portiere ich Stück für Stück und meine Kunden sehen dann immer mehr Windows. So kommt dann auch keine Unruhe auf, wenn die sehen, dass sich immer etwas tut.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz