Forum: PC-Programmierung Delphi Funktion


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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) (Moderator) 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.