Forum: PC-Programmierung Delphi 3 Programm kompilieren


von Michael (Gast)


Lesenswert?

Hallo zusammen,

ich möchte den Quellcode eines in Delphi 3 geschriebenen Programms gerne 
kompilieren (und später auf eine neuere Version updaten).

Der Quellcode liegt mir vollumfänglich vor. Ebenso Delphi 3. Wenn ich 
nun den Quellcode versuche zu kompilieren, fehlen dem Compiler leider 
verschiedene Abhängigkeitsdateien.

Zum einen fehlt die Komponente TBiGauge, zum anderen die Dateien 
"Dos.dcu" und "Dos.pas".

Zu letzteren finde ich recht viele Foreneinträge im Internet, wo es aber 
immer heißt, dass es sich um (Turbo) Pascal Abhängigkeitsdateien handeln 
würde. Allerdings ist das Programm ganz sicher in Delphi geschrieben.

Eingebunden werden soll die Dos.dcu in der Datei "BaseSupp.pas":

{$IFDEF Windows}
  WinProcs                                                  {!!.41}
 {$IFNDEF VER80}                                            {!!.51}
  , WinDos                                                  {!!.51}
 {$ENDIF};                                                  {!!.51}
{$ELSE}
 {$IFDEF DPMI}
  WinAPI,                                                   {!!.41}
 {$ENDIF}
  Dos;
{$ENDIF}

Ich frage mich, ob es daran liegen könnte, dass "Windows" nicht 
definiert ist. Eigentlich sollte er "Dos" ja gar nicht einbinden.

Dass das evtl. das Problem sein und ich sollte irgendwo (wo?) Windows 
definieren.

Ich bin leider mehr in C++ und C# als in Delphi unterwegs. Leider muss 
ich mich jetzt mit Delphi beschäftigen, weil das Programm unter Win 64 
bit nicht mehr läuft und deshalb erneuert werden muss.

Vielen Dank für Eure Unterstützung.
Michael

von Morc (Gast)


Lesenswert?

Stell diese Frage doch besser im Embarcadero forum : embarcadero. 
public.delphi. ...

von Vlad T. (vlad_tepesch)


Lesenswert?

Michael schrieb:
> Leider muss
> ich mich jetzt mit Delphi beschäftigen, weil das Programm unter Win 64
> bit nicht mehr läuft und deshalb erneuert werden muss.

warum denkst du, dass dir ein simples neuübersetzen mit einem 15 Jahre 
alten Compiler dir da hilft?

von Peter II (Gast)


Lesenswert?

Vlad Tepesch schrieb:
> warum denkst du, dass dir ein simples neuübersetzen mit einem 15 Jahre
> alten Compiler dir da hilft?

schon mal alles gelesen?

> ich möchte den Quellcode eines in Delphi 3 geschriebenen Programms gerne
> kompilieren (und später auf eine neuere Version updaten).

von Michael (Gast)


Lesenswert?

Ja - in einem Forum zu Delphi werde ich auch fragen. Bisher habe ich 
hier eben sehr kompetente Personen gefunden und deshalb auch hier 
nachgefragt.

Nur neu kompilieren hilft hier natürlich nicht. Ich würde es aber gerne 
zunächst in der Entwicklungsumgebung kompilieren, in der es auch 
programmiert wurde. Wenn das klappt und ich alle Abhängigkeiten dafür 
zur Verfügung stehen habe, kann ich mir überlegen, wie ich es in eine 
Version von Delphi bekomme und dort kompiliert und vorher ggf. angepasst 
bekomme.

Das Programm stammt nicht von mir, sondern wurde von einem Programmierer 
vor ca. 15 Jahren geschrieben. Da es in der Vergangenheit auch immer 
zufriedenstellend lief, wurde hieran nichts geändert. Jetzt hakt es aber 
an der Maßgabe, dass Verzeichnisse nur aus acht Buchstaben bestehen 
dürfen und eben unter Win x64 keine Funktion mehr möglich ist. Der 
Programmierer steht nicht mehr zur Verfügung, so dass ich jetzt selbst 
den Quellcode ausgepackt habe und mich daran versuche.

von StinkyWinky (Gast)


Lesenswert?

> Ich frage mich, ob es daran liegen könnte, dass "Windows" nicht
> definiert ist. Eigentlich sollte er "Dos" ja gar nicht einbinden.

Versuchs mal mit:

{$DEFINE Windows}

von Michael (Gast)


Lesenswert?

Ok - das habe ich jetzt mal eingefügt. Dann verlangt er nach einer 
"WinDos.dcu", die ich im Internet finden konnte (ebenso wie eine hiervon 
benötigte String.dcu).

Hierbei handelt es sich allerings wohl um Dateien für 16 bit Delphi 
(Titel der Seite: teravue-16bits-delphi).

Beim Versuch zu kompilieren kommt nun folgende Fehlermeldung:
Operandengröße stimmt nicht überein

function StrLen(Str: PChar): Word; assembler;
asm
  CLD
  LES  DI,Str
  MOV  CX,0FFFFH
  XOR  AL,AL
  REPNE  SCASB
  MOV  AX,0FFFEH
  SUB  AX,CX
end;

In der Zeile "LES DI, Str" tritt der Fehler auf.

Ich bin langsam am Zweifeln, ob das Programm wirklich mit Delphi 3 
geschrieben wurde, oder ob die Probleme nicht daher kommen, dass es ein 
Delphi 2 oder sogar Delphi 1 Programm ist. Das würde auch den obigen 
Fehler erklären und ggf. auch, weshalb die ganzen Abhängigkeiten fehlen.

Delphi 1 war wohl auch 16 bit.

Hat jemand eine Idee, wie ich an die 1. oder 2. Version von Delphi komme 
(auf der Delphi 3 CD ist sie aus irgendeinem Grund nicht drauf. Wenn ich 
bei der Installationsroutine Delphi 1 anklicke, kommt "Datei nicht 
gefunden").

Kann ich irgendwie rausfinden, in welcher Version der Quellcode 
geschrieben ist?

von StinkyWinky (Gast)


Lesenswert?

Bei mir (Delphi7) gibt es eine .dof Datei mit folgendem Eintrag:

[FileVersion]
Version=7.0

Schau doch mal in die "verdächtigen" Dateien.

von Michael (Gast)


Lesenswert?

Eine *.dof Datei gibt es leider nicht. In den verdächtigen Dateien (alle 
Dateien mit dem Projektnamen) finde ich leider nichts äquivalentes.

Ich habe evtl. grade in einem alten Schrank Delphi 1 aufgetrieben. Mal 
schauen, was da passiert.

von Robert L. (lrlr)


Lesenswert?

klingt irgendwie eher nach "Borland Pascal"
(das war zwischen turbo pascal und delphi 1)
man konnte aber bereits windows programme schreiben


fehlende .dfm files würden darauf hindeuten..


aber: was willst du eigentlich bezwecken?
wenn du offensichtlich von pascal/delphi keine ahnung hast?

ohne (zumindest) etwas grundwissen wird das "neukompilieren als 32 
software" eher schwierig ...

ich würde generell eher lazarus/free pascal nehmen..


delphi 2 programm ist es übrigns nicht (das wäre schon 32 bit, und du 
hättest dein problem garnicht)

In der Zeile "LES DI, Str" tritt der Fehler auf.

ja, weil DI ein 16 bit register ist
dein PChar aber 32 bit
.

von Michael (Gast)


Lesenswert?

Robert L. schrieb:
> fehlende .dfm files würden darauf hindeuten..

*.dfm Dateien gibt es für jedes Formular. Heißt - es ist wohl doch 
Delphi?

Robert L. schrieb:
> ohne (zumindest) etwas grundwissen wird das "neukompilieren als 32
> software" eher schwierig ...

Ich arbeite seit Jahren mit C/C++, C# und VB. Ich denke schon, dass 
Grundwissen vorhanden ist - Delphi habe ich mal ein Jahr etwas gemacht, 
ist aber schon länger her.

Ich gehe davon aus, dass ich mich hier ausreichend einarbeiten kann.

Robert L. schrieb:
> ja, weil DI ein 16 bit register ist
> dein PChar aber 32 bit
So habe ich mir das gedacht.

Vielen Dank und gute Nacht.

von Robert L. (lrlr)


Lesenswert?

ok, dann ist es delphi 1 (das einzige 16 bit delphi)

probier mal lazarus
das hat einen delphi->lazarus "converter"


wenn du doch bei delphi bleibst:
kopier nicht einfach irgendwelche .dcu files aus dem internet .. die 
müssen zur jeweiligen delphi version passen (man kann nicht z.b. xy.dcu 
von delphi 2 in delphi 3 verwenden)

StrLen()
ist übrigens in der unit "sysUtils.pas"
dort musst du einfach die aktuelle (die mit deinem delphi ausgelieferte) 
verwenden

sollte dein sourcecode aus unerfindlichen gründen, diese unit enthalten, 
einfach löschen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.