Boost Python .. crash exposing enums

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
GreyHound
User
Beiträge: 1
Registriert: Dienstag 11. August 2009, 19:57

Hallo Python Forum ;)

Ich hoffe ich bin hier nicht allzu fehlplaziert wenn ich mit einem boost python Problem auftrumpfe ;D

Ich hoffe dass sich hier im Forum einige Leute tummeln die sich auch mit der integration von Python in C++ auskennen. Aus diesem Grund versuche ich hier Hilfe zu meinen Problem zu finden.

Nun aber zu meinem Problem

Ich versuche momentan ein Enum innerhalt eines Namespaces zu exposen, allerdings crashed mir meine Application mit einem (mir) nichtssagendem Fehler. Kann sich jemand von euch einen Reim darauf bilden? Laut der boost::python spec und sämtlichen beispielen mache ich alles korrekt, auch habe ich niergendwo Hinweise gefunden die auf eventuelle Probleme hinweisen könnten.

Wäre super wenn jemand nen Tipp hätte wo sich da der Fehlerteufel versteckt.

Es sei gesagt, die Klassen innerhalt expose.cpp kann ich einwandfrei exposen und auch fehlerfrei verwenden. Nur diese Enumeration, welche auf gleiche Höhe im Namespace liegt verursacht tierische Probleme.

Der Code compiled einwandfrei und sobald ich den code auskommentiere welcher für das freigeben des enums zuständig ist läuft alles einwandfrei.

//rules.h

Code: Alles auswählen

namespace MapView
{
	namespace Rules {

		enum RuleTypes
		{
			RULE_UNKNOWN = 0,
			RULE_TERRAIN
		};
		class Rule {
			//expose klappt einwandfrei
		};
		class RuleManager {
			//expose klappt einwandfrei
		};
};
//expose.cpp

Code: Alles auswählen

#include "pyWrapper.h"
#include "rules.h"

using namespace MapView;
using namespace MapView::Rules;

void pyWrapper::wrapRules()
{
//das klappt perfect
	boost::python::class_<Rule, boost::noncopyable>("Rule", boost::python::no_init)
			.def_readwrite("Description",	&Rule::Description)
			.def_readwrite("Type",			&Rule::Type)
	;
//hier kommt der crash, direct in der ersten linie
	boost::python::enum_<RuleTypes>("RuleTypes")
		.value("RULE_UNKNOWN", RULE_UNKNOWN)
		.value("RULE_TERRAIN", RULE_TERRAIN)
	;
}
MSVC liefert mir folgenden Fehler wenn ich die App debuggen will:
Mein Code Läuft in plug_Script.dll btw
"GUI.exe": "F:\Projekte\# projecte\# cpp\MapViewProject\Debug\plug_Script.dll" geladen, Symbole wurden geladen.
"GUI.exe": "C:\WINDOWS\system32\python24.dll" geladen, Keine Symbole geladen.
"GUI.exe": "C:\WINDOWS\system32\msvcr71.dll" geladen, Keine Symbole geladen.
"GUI.exe": "F:\Projekte\# projecte\# cpp\MapViewProject\Debug\boost_python-vc80-mt-1_39.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
Eine Ausnahme (erste Chance) bei 0x7c812aeb in GUI.exe: Microsoft C++-Ausnahme: boost::python::error_already_set an Speicherposition 0x0012f6a0..
Das Programm "[2148] GUI.exe: Systemeigen" wurde mit Code -1 (0xffffffff) beendet.
Wenn ich in Linie 16 in expose.cpp einen Breakpoint setze und in Einzelschritten durchsteppe ist der letzte verfügbare Aufruf folgender:

Code: Alles auswählen

template <class T>
inline enum_<T>::enum_(char const* name, char const* doc )
    : base(
        name
        , &enum_<T>::to_python
        , &enum_<T>::convertible_from_python
        , &enum_<T>::construct
        , type_id<T>()
		, doc
        )
{
}
in enum.hpp

Die Genau Abfolge der Durchsteppens ist: (boost 1.39.0)
enum.hpp Line 46 (in meinem Posting entspricht das linie 12 der template klasse)
type_id.hpp Line 80
type_id.hpp Line 89
type_id.hpp Line 127
type_id.hpp Line 128
type_id.hpp Line 89
type_id.hpp Line 90
enum.hpp Line 46
nach heisst es für die aktuelle position sei kein Quellcode verfügbar ... mir bleibt nur noch F5 in MSVC um mein angegebenen Fehler zu landen.
Danke schonmal für eventuelle Antworten.
Antworten