ich habe da mal ein kleines riesenproblem.
ich habe ein interface welches in einer dll bedient wird. diesem interface übergebe ich 2 std::wstring
objekte. sobald ich das programm dann ausführe, läuft es bis zur besagten übergabe, aber sobald die
funktion in der dll fertig ist, fliegt mir mein programm um die ohren.
code im programm (exe):
Code: Alles auswählen
Urks::Plugin::Guier::CObject* pDebugWindow = this->getGuierInterface()->createObject(L"Window", L"DebugWindow");
code in der dll:
Code: Alles auswählen
Urks::Plugin::Guier::CObject* UrksGuier::CGui::createObject(std::wstring strFactoryName, std::wstring strObjectName) {
/* den code hier drin habe ich ausgelassen, da das programm auch bei dieser leeren funktion abstürzt */
return 0;
}
debug-ausgabe:
HEAP[UrksCore.exe]: Invalid Address specified to RtlValidateHeap( 00370000, 003432A8 )
Windows hat einen Haltepunkt in UrksCore.exe ausgelöst.
Dies kann auf eine Beschädigung des Heaps zurückzuführen sein, die auf ein Problem in UrksCore.exe oder in einer der geladenen DLLs hinweist.
callstack und haltepunkt:
meine meinung:
sieht für mich so aus, als würde der destruktor der std::wstring das problem verursachen. sobald ich die variablen als
referenz übergebe funktioniert alles wie soll. was noch recht interessant ist: der fliegt erst ab einer stringgröße von
> 7 zeichen weg ...
weitere informationen:
die dll hat nur einen einstiegspunkt
Code: Alles auswählen
extern "C" {
__declspec(dllexport) Urks::Plugin::CInterface* factory(Urks::Core::CInterface& CoreInterface) {
static UrksGuier::CGui theone(CoreInterface);
return &theone;
}
}
für hinweise, vorschläge oder gar die lösung bin ich sehr dankbar
euer stiller mitleser
<p.s.> ich glüße lechhelzlich meinen mentol </p.s.>