Programm stürzt ab wenn CStringArray geleert wird ...
-
Ich habe in meinem Programm ein CStringArray, welches aus einer DLL heraus mit strings gefüllt wird. sobald beim beenden des programms 'RemoveAll()' aufgerufen wird stürtzt das programm ab.
ich weis schon das ich nicht aus der DLL heraus neue CStrings erzeugen kann, in das Array vom programm einfügen und das Array dort dann leeren kann.
aber wie umgehe ich das jetzt ? mein ansatz wäre jetzt (ich weis nicht ob es so ohne weiteres möglich ist) aus der DLL beim erzeugen der neuen strings speicher vom programm, nicht der DLL, zu reservieren. dann dürfte es ja keine probleme geben.
oder muss ich das ganz anders machen ?
-
Ist die DLL ebenfalls mit der MFC in derselben VErsion erzeugt?
Dann kannst du in den Linkereinstellungen Multithreaded DLL benutzen. Dadurch benutzt dann Programm und DLL denselben Speicher-Manager und es gibt keinen Absturz mehr.
Ansonsten musst du wirklich dafür sorgen, dass die String, welche in der DLL erzeugt wurden, auch dort wieder freigegeben werden.
-
ich habe die Multithreaded DLL eingeschaltet. ob das problem gelöst ist kann ich nicht sehen, da folgender fehler auftritt:
mein hauptprogramm, welches die DLL läd, soll ein Dialogfeld anzeigen. dieses wird aber sofort wieder beendet nach dem aufruf von 'DoModal()'.
'GetLastError()' liefert mir 'ERROR_RESOURCE_DATA_NOT_FOUND'.
laut meiner google-suche kann es probleme mit dem laden von resourcen geben. ich verwende zwar bitmaps in meiner DLL, aber das dialogfeld, welches ich öffnen will, hat damit gar nichts mit der DLL zu tun !?
dort werden bitmaps aus dem hauptprogramm geladen.
-
ich habe in meinem hauptprogramm eine klasse 'CInterface' (die nur 'virtuelle' funktionen enthält) von der die applikationsklasse meines hauptprogramms erbt.
die DLL bekommt ein pointer (Typ 'CInterface') auf die applikationsklasse.
wenn die DLL das programm über ein bestimmtes ereignis informieren will ruft sie die funktion des applikationsklasse über 'CInterface' auf.
wahrscheinlich tritt der fehler auf weil die funktion in dem das dialogfeld aufgerufen wird von der DLL aufgerufen wurde !?
nur wie kann ich das problem beheben ?
EDIT:
Habe jetzt ein anderes problem, mache dafür nen neues thema auf.