Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prozedur _LStrAsg in der Unit Systems (https://www.delphipraxis.net/58149-prozedur-_lstrasg-der-unit-systems.html)

Amateurprofi 2. Dez 2005 00:19


Prozedur _LStrAsg in der Unit Systems
 
Ich programmiere gern und oft in Assembler.
Um einen in einer Assemblerroutine erzeugten und auf dem Stack abgelegten String in eine Variable des Typs String zu kopieren will ich die in systems enthaltene Routine _LStrAsg benutzen.
Problem : Die Routine, obwohl im Interface von System deklariert, läßt sich nicht aufrufen.
Meine bisherige Lösung :

Ich rufe in FormCreate die Prozedur _CopyStr auf (damit sie Compiliert wird) und dann die Prozedur GetLStrAsgAddress, die aus dem Compilat von _CopyStr die Adresse von _LStrAsg holt und speichert.

Weiß jemand eine elegantere Methode, um an die Adresse von _LStrAsg heranzukommen ?
Herzlichen Dank.

Delphi-Quellcode:
var LStrASG:Cardinal;
const DummiStr:String='Dummi';

PROCEDURE _CopyStr(var s:string);
begin
   s:=DummiStr;
end;

FUNCTION GetLStrAsgAddress:boolean;
asm
      xor  eax,eax            // Result=False
      lea  edx,_CopyStr+$10;  // da steht call _LStrAsg
      cmp  byte [edx],$E8      // Steht das da wirklich ('E8'='call'?
      jne  @End
      inc  edx                // Zeigt auf die relative Adresse von _LStrAsg
      add  edx,[edx]          // Offset addieren
      add  edx,4               // + 1 DWord für die Adresse
      mov  LStrAsg,edx        // speichern
      inc  eax                // Result=True
@End:
end;

jim_raynor 2. Dez 2005 04:18

Re: Prozedur _LStrAsg in der Unit Systems
 
Du kannst die Funktion in Assembler direkt mit "CALL System.@LSTRASG" aufrufen.

Amateurprofi 2. Dez 2005 19:31

Re: Prozedur _LStrAsg in der Unit Systems
 
Christian.
super Tip. Funktioniert hervorragend.
Vielen Dank für Deine Hilfe.
Gruß, Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr.

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