![]() |
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? |
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; |
Re: Problem ein Projekt zu einem anderen hinzuzufügen
CodeMemPages ist aber anfangs nil?
|
Re: Problem ein Projekt zu einem anderen hinzuzufügen
wäre schön, wenn es so einfach wäre.
ja, der ist nil. |
Re: Problem ein Projekt zu einem anderen hinzuzufügen
Also dereferenzierst Du einen nil-Pointer.
|
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?! |
Re: Python4Delphi - Integrationsprobleme
Zitat:
Edit: passiert der Fehler bei ersten Durchlauf, oder bei einem anderen. Und könntest du bitte die gesamte Fehlermeldung zeigen (insbes. die Zahlen) |
Re: Python4Delphi - Integrationsprobleme
Zitat:
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:
stehen lassen und die Dereferenzierung des nil-Zeigers rausgenommen.
if (page = nil) then
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. |
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. |
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. |
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