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
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?
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).
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.
> 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}
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?
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.
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
.
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.
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!