Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.443 Beiträge
 
Delphi 7 Professional
 
#3

AW: Klassen mit Pascal-Script in der Script-Engine (paxCompiler) auslesen

  Alt 19. Okt 2023, 19:15
Habe einen in Delphi 7 geschriebenen Editor, der als Scriptengine "RemObjects Pascal Script" nutzt.

Im Quelltext werden zu exportierende Prozeduren in der Form Sender.AddFunction(@MyAbout, 'procedure About;'); aus dem Programm heraus nach Pascalscript exportiert. In Pascalscript kann in diesem Beispiel die Prozedur About aufgerufen werden. Sie zeigt den entsprechenden Dialog des Editors.

Die Zeichenfolge 'procedure About;' kann ich auch in der Exe finden.

Daraus entstand dann die Idee es mal über die Kommandozeile zu versuchen:
Code:
find /i "procedure " name_der.exe > Prozeduren.txt
find /i "function " name_der.exe > Funktionen.txt
Es wird jeweils eine ziemlich lange Liste ausgegeben, die, wenn ich das recht überblicke, u. a. alle in Pascalscript nutzbaren Prozeduren / Funktionen enthält, aber leider auch ziemlich viele andere Fundstellen.

Aber eine manuelle "Nacharbeit" sollte da weiterhelfen können.

Die exportierten Variabeln sind ebenfalls in der Exe zu finden, allerdings finde ich keine Möglichkeit sie auf der Kommandozeile mit Find zu finden In der Hexadezimalansicht der Exe (mit 'nem entsprechenden Viewer) sind (vermutlich) alle Prozeduren, Funktionen und exportierten Variabeln, zwischen ˙˙˙˙ und jeweils zweimal Hex 00 und einem weiteren hexadezimalen Wert, zu finden.

Bei dieser Art der Auswertung solltes Du wissen was Du tust, aber für einen groben Überblick könnte es eventuell reichen.

Quelltextauszug zum Editor:
Delphi-Quellcode:
  // Registrierung der in dieser Unit implementierten Funktionen für PascalScript.
{tkEditor}  Sender.AddFunction(@MyAdoxCreate,' function AdoxCreate(sConnectionString : String) : Boolean;');
{tkEditor}  Sender.AddFunction(@MyCloseEditor, 'procedure CloseEditor;');
{tkEditor}  Sender.AddFunction(@MyCopyStringToClipboard,' procedure CopyStringToClipboard(inText : TStrings);');
{tkEditor}  Sender.AddFunction(@MyCopyToHTML,' procedure CopyToHTML(sLanguage : String);');
{tkEditor}  Sender.AddFunction(@MyExportToHTML,' procedure ExportToHTML(sFileName : String);');
{tkEditor}  Sender.AddFunction(@MyConvertSourceToHTML,' procedure ConvertSourceToHTML(sLanguage : String; sl : TStrings);');
{tkEditor}  Sender.AddFunction(@MyGetDBStatus,'function GetDBStatus : String;');
In der Ausgabe von Find dazu gefunden:
Code:
function AdoxCreate(sConnectionString : String) : Boolean;
procedure CloseEditor;
procedure CopyStringToClipboard(inText : TStrings);
procedure CopyToHTML(sLanguage : String);
procedure ExportToHTML(sFileName : String);
procedure ConvertSourceToHTML(sLanguage : String; sl : TStrings);
function GetDBStatus : String;
Und natürlich hab' ich keine Ahnung, ob das bei Deinem Programm auch so gehen könnte und das für Dich einen gangbaren Weg darstellt.
  Mit Zitat antworten Zitat