Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Python4Delphi - Integrationsprobleme (https://www.delphipraxis.net/123850-python4delphi-integrationsprobleme.html)

0xDEAD 10. Nov 2008 10:50


Python4Delphi - Integrationsprobleme
 
Hallo zusammen,

ich habe grade ein Problem und finde keine Antwort... :wall:

Ich würde gerne einen PythonParser in mein Projekt integrieren und habe mir "Python for Delphi" angesehen.
Hat auch alles wunderbar geklappt. Und ich habe ein kleines Testprogramm geschrieben, dass auch sehr gut funktioniert.

Jetzt möchte ich dieses Projekt in mein Hauptprojekt integrieren.
Also habe ich mein Testprojekt hinzugefügt, es kompiliert auch und dann.... EAccessViolation!

Wie kann das sein?
Hat jemand eine Idee? Was kann ich tun?

0xDEAD 11. Nov 2008 09:55

Re: Problem ein Projekt zu einem anderen hinzuzufügen
 
Hallo,

nachwievor bin ich noch nicht auf eine Lösung gestoßen.
Die Exception wird an der markierten Stelle angezeigt (bei der if-Abfrage).

Hat jemand eine Idee wie es dazu kommen kann oder einen Tipp wie ich das Problem in den Griff kriegen kann?

Grüße,
der Tom



Delphi-Quellcode:


procedure GetCodeMem(var ptr: PByte; size: integer);
var
  page: PCodeMemPage;
  block: PCodeMemBlock;
begin

  //---allocates Block from executable memory
  // executable memory is requested in pages via VirtualAlloc
  // handed back in blocks of requested size
  // determine if there is already a page assigned and
  // that it has enough space requested block

  page := CodeMemPages;

->>>if (page = nil) or (Longint(CodeMemPages^.CodeBlocks) - Longint(Pointer(CodeMemPages)) <= (size + 3*sizeof(PCodeMemBlock))) then
  begin
    // allocate new Page
    page := VirtualAlloc(nil, PageSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    page^.next := CodeMemPages;
    CodeMemPages := page;
    // init pointer to end of page
    page^.CodeBlocks := Pointer(Longint(page) + PageSize);
  end;

  //---blocks are assigned starting from the end of the page
  block := Pointer(Longint(page^.codeBlocks) - (size + sizeof(PCodeMemBlock)));
  block^.Next := page^.CodeBlocks;
  page^.CodeBlocks := block;

  ptr := @(block^.Code[0]);

end;

sirius 11. Nov 2008 10:08

Re: Problem ein Projekt zu einem anderen hinzuzufügen
 
CodeMemPages ist aber anfangs nil?

0xDEAD 11. Nov 2008 10:30

Re: Problem ein Projekt zu einem anderen hinzuzufügen
 
wäre schön, wenn es so einfach wäre.
ja, der ist nil.

DeddyH 11. Nov 2008 10:32

Re: Problem ein Projekt zu einem anderen hinzuzufügen
 
Also dereferenzierst Du einen nil-Pointer.

0xDEAD 11. Nov 2008 10:38

Re: Python4Delphi - Integrationsprobleme
 
nil Pointer dereferenzieren ist schlecht, ja.

Der Code ist aus der Python4Delphi Source.

Wie gesagt, wenn ich den Quellcode alleine laufen lassen, wird meine Klasse wunderbar exportiert und kann in Python zugegriffen werden. Aber jetzt habe ich es zu meinem Haupt-Projekt hinzugefügt und jetzt dieser Fehler.

Vielleicht auch ein Problem mit globalen Variablen auf die jetzt kein Zugriff mehr besteht?!

sirius 11. Nov 2008 10:46

Re: Python4Delphi - Integrationsprobleme
 
Zitat:

Zitat von 0xDEAD
Vielleicht auch ein Problem mit globalen Variablen auf die jetzt kein Zugriff mehr besteht?!

Ahja, wie ist denn PageSize initialisiert?

Edit: passiert der Fehler bei ersten Durchlauf, oder bei einem anderen. Und könntest du bitte die gesamte Fehlermeldung zeigen (insbes. die Zahlen)

0xDEAD 11. Nov 2008 11:07

Re: Python4Delphi - Integrationsprobleme
 
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt drvtst.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00474C59 in Modul 'drvtst.exe'. Lesen von Adresse 00000004'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

ptr = $26BBE18
size = 33
page = nil
CodeMemPages = nil

Edit1: PageSize = 4096


Wenn ich die Adresse von ptr zu den überwachten Ausdrücken hinzufüge, dann steht da nur 40615448

Ich habe mal aus der IF-Anweisung den letzten Teil entfernt, d.h. nur
Delphi-Quellcode:
if (page = nil) then
stehen lassen und die Dereferenzierung des nil-Zeigers rausgenommen.
Dann läuft es und ich kann auch auf mein Objekt zugreifen.
Nur beim Beenden taucht wieder eine Exception auf.

Edit2: Die Exception taucht direkt beim ersten Durchlauf auf.

sirius 11. Nov 2008 11:26

Re: Python4Delphi - Integrationsprobleme
 
Es sieht so aus, als ob dein Porjekt bei Boolschen Operationen eine vollständige Auswertung durchführt.

Versuche, dass mal in den Projekteinstellungem herauszubekommen, oder mit der Direktive {$B-} auszuschalten.

0xDEAD 11. Nov 2008 11:41

Re: Python4Delphi - Integrationsprobleme
 
Jawohl, "Projekt" >> "Optionen" >> "Boolsche Ausdrücke vollständig" ist aktiviert.
Sag jetzt bitte nicht, dass das schlecht ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 Uhr.
Seite 1 von 2  1 2      

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