Forum: PC-Programmierung Delphi Funktion


von Steffen (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Anliegen für Leute, die schon lange mit Pascal / Delphi 
arbeiten. Ich habe eine Software aus Delphi 1 (16bit), die 
zwischenzeitlich nicht mehr auf 64bit Betriebssystemen läuft. Ich möchte 
diese nun in Delphi 3 übersetzen, was auch bis auf eine Kleinigkeit 
gelungen ist.

Problem ist folgende Funktion:

Function CallFarProc (Var DatS; KeyNr: BYTE) : IsamKeyStr;
INLINE($FF/$1E/ProcAdress);

ProcAdress ist vom Typ Pointer und zeigt auf eine Funktion, die 
ausgeführt werden für CallFarProc ausgeführt werden soll. Das hat in 
Delphi 1 so funktioniert, allerdings scheint es diese Anweisung in 
Delphi 3 nicht mehr zu geben.

Ich programmiere selbst nur in C++ / C# / Basic und bin grade etwas 
überfordert. Vielleicht kann mir jemand einen Tipp geben, wie ich die 
Funktion mit den Pointer ProcAdress einfügen kann.

Vielen Dank und schönes WE!
Steffen

von Jim M. (turboj)


Lesenswert?

Steffen schrieb:
> Function CallFarProc (Var DatS; KeyNr: BYTE) : IsamKeyStr;
> INLINE($FF/$1E/ProcAdress);

Soll vermutlich ein in Assembler codierter Funktionsaufruf "far" sein, 
$FF ist dessen Opcode. Könnte eine Krücke für das 16-bittige Delphi 1 
sein, braucht man in 32- und 64-bit nicht mehr.

Das muss man in Delphi sinngemäß übersetzen: Delphi kennt Funktions- und 
Prozedurzeiger.

Am Einfachsten müsste es sein, wenn ProcAddress gleich den richtigen Typ 
hat:
1
type tProcAddress = Function(Var DatS; KeyNr: BYTE) : IsamKeyStr;
2
3
var ProcAddress: tProcAddress;
4
5
implementation
6
7
Function CallFarProc (Var DatS; KeyNr: BYTE) : IsamKeyStr;
8
begin
9
   result:=ProcAddress(DatS,KeyNr);
10
end;

von длинний зелёний тролль (Gast)


Lesenswert?

Delphi 3 ? Soll das ein Witz sein ? Delphi 3 war zwar super, das war 
aber im letzten Jahrtausend. "IsamKeyStr" erinnert mich an irgendwelche 
Toolboxen.

Ich wuer alles neu schreiben. Das macht man heute in einem Bruchteil der 
Zeit. Das GUi ist besser, der Compiler ist schneller, der Code ist 
schneller.

von Noch einer (Gast)


Lesenswert?

Und die modernen Technologien veralten schneller.

Bis du es in Angular umgesetzt hast, ist Angular schon längst wieder 
Steinzeittechnologie. Du musst es gleich wieder auf React umbauen. Bis 
du es in React umgesetzt hast ...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

длинний зелёний тролль schrieb:
> Ich wuer alles neu schreiben. Das macht man heute in einem Bruchteil der
> Zeit.

Wenn man die eigentliche "business logic" kennt, und sie trivial genug 
ist ...

von Georg (Gast)


Lesenswert?

длинний зелёний тролль schrieb:
> Ich wuer alles neu schreiben

Ich habe z.B. so alte Win16-Programme, die setzen die Rechnungsdaten aus 
der Fertigung so um, dass sie von der Buchhaltung gelesen werden können. 
Kein Hexenwerk, aber braucht man halt.

длинний зелёний тролль schrieb:
> Das GUi ist besser, der Compiler ist schneller, der Code ist
> schneller

Und das ist für so einen Zweck völlig irrelevant. Eher noch ist es 
besser, wenn sich an Aussehen und Bedienung GARNICHTS ändert.

Georg

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.