Access violation in wxmsw26h_vc.dll

Plattformunabhängige GUIs mit wxWidgets.
Antworten
diComm
User
Beiträge: 10
Registriert: Mittwoch 10. Januar 2007, 09:46

Freitag 2. Februar 2007, 15:23

Hallo Zusammen

Ich arbeite an einer Software mit Delphi, in der ich mit PythonForDelphi einige Pythonscripts ausführe. Einige Scripts haben auch GUIs, die ich mit PythonCard erstellt habe.

Jetzt das Problem: wenn ich ein PythonScript mit einem GUI ausführe klappt das wunderbar, aber wenn ich danach ein zweites Script mit GUI ausführe, bekomme ich eine Access Violation in wxmsw26h_vc.dll und meine Applikation wird beendet :-(

Mir ist aufgefallen, das der PythonScripter den gleichen Effekt hat wenn ich meine Scripts dort ausführe... und dieser ist ja auch in Delphi mit PytohnForDelphi geschrieben.

Wenn ich die Scripts normal öffne mit Doppelclick drauf, gibts keine Probleme...

Kennt jemand diesen Effekt oder noch besser eine Lösung dafür?

Ich benutze mit Pytohn 2.3.4

Danke im Voraus
MfG
diComm
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 2. Februar 2007, 18:59

Hi dicom!

Vielleicht genügt es ja schon, wenn du am Ende des Programms die wx.Application-Instanz mit ``del`` zerstörst.

Wenn nicht: Zeige uns doch mal ein Beispielskript (auf das Wichtigste reduziert).

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
diComm
User
Beiträge: 10
Registriert: Mittwoch 10. Januar 2007, 09:46

Freitag 2. Februar 2007, 20:01

Hi

naja, das Problem tritt schon beim einfachsten atomatisch erzeugten GUI mit PythonCard auf...

Code: Alles auswählen

from PythonCard import model

class MyBackground(model.Background):

    def on_initialize(self, event):
        pass

if __name__ == '__main__':
    app = model.Application(MyBackground)
    app.MainLoop()
und die rsrc.py dazu

Code: Alles auswählen

{'application':{'type':'Application',
          'name':'Template',
    'backgrounds': [
    {'type':'Background',
          'name':'bgTemplate',
          'title':'Standard Template with no menus',
          'size':(400, 300),

         'components': [

] # end components
} # end background
] # end backgrounds
} }
Bin leider noch nicht sehr begabt mit Python... Wo käme das "del" hin?

Wenn ich das obere Script ausführe wird das GUI angezeigt. wenn ich es schliesse kann ich nicht mal mehr eine Änderung mit PyScripter darin vornehmen. Sobald ich etwas schreiben will kommt die Access Violation...

Dass selbe passiert übrigens auch bei Anwendungen mit BOA...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 3. Februar 2007, 09:11

Hi diComm!

Ich habe keine Ahnung von PythonCard, aber vielleicht funktioniert dieser Code bei dir.

Code: Alles auswählen

from PythonCard import model

class MyBackground(model.Background):

    def on_initialize(self, event):
        pass

if __name__ == '__main__':
    app = model.Application(MyBackground)
    app.MainLoop()
    del app
    del model # vielleicht auch schon ohne dieses ``del``
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
diComm
User
Beiträge: 10
Registriert: Mittwoch 10. Januar 2007, 09:46

Samstag 3. Februar 2007, 12:00

Hallo gerold

Beide "del" haben nichts genützt... aber ich konnte jetzt den Fehler genauer bestimmen. Wenn ich das Script ein zweites mal ausführen will kommt ein Fehler aus der _core.py aus der Klasse class _wxPyUnbornObject(object) und sagt:

"The C++ part of this object has not been initialized, attribute access not allowed."

Die Beschreibung zu der Klasse ist
Some stock objects are created when the wx._core module is
imported, but their C++ instance is not created until the wx.App
object is created and initialized. These object instances will
temporarily have their __class__ changed to this class so an
exception will be raised if they are used before the C++ instance
is ready.

Allerdings kann ich mir nicht viel darunter vorstellen, da ich das Objekt app ja erstellt habe und mit deiner Codeerweiterung auch ganz sicher freigegeben habe... und wie gesagt,auch mit BOA GUIs habe ich das. Ich denke mittlerweile, dass das ein Fehler von PythonForDelphi ist und nicht von wxPython.

Ich werde mich, sobald ich die Zeit finde, mal intensiv mit Delphi debuggen beschäftigen. DAnke trotzdem und für weitere Ideen/Lösungen/Denkanstösse bin ich weiterhin sehr dankbar

Gruss
diComm
diComm
User
Beiträge: 10
Registriert: Mittwoch 10. Januar 2007, 09:46

Dienstag 6. Februar 2007, 10:43

Hallo

Falls hier noch jemand mitliest und den selben Fehler hat, ich habs gefunden. Es lag an meiner alten wxPython version. Weil ich noch mit BOA rumspiele, habe ich wxPython 2.6 benutzt. Nehme ich die 2.8 dann habe ich diesen Fehler nicht und alles funktioniert wunderbar...

MfG
diComm
Antworten