Die falschen DLL-Dialoge werden aufgerufen



  • Hallo,

    ich habe hier eine EXE mit mehreren DLLs. In der einen DLL musste ich jetzt mehrere Dialoge hinzu fügen. Diese haben teilweise die gleichen IDs wie andere Dialoge. Jetzt kommt es dazu, dass die falschen Dialoge geladen werden.

    Beispiel:
    Im Menü der EXE wurde bisher ein Dialog aus der A.dll aufgerufen.
    Nach den letzten Änderungen wird jetzt aber der neue Dialog mit der gleichen ID aus B.dll aufgerufen.

    Das hier
    http://www.codeguru.com/cpp/w-p/dll/article.php/c107/
    ist schon seit längerer Zeit eingebaut und hat bisher auch funktioniert.
    Ausserdem würfelt das Programm ja nicht doppelte IDs von EXE und DLL durcheinander, sondern aus verscheidenen DLLs.

    Die IDs von Hand zu ändern ist mir zu unsicher, da es dann irgendwann in der Zukunft wieder zu Überschneidungen kommen kann.

    Irgendwelche Tipps oder Ideen (fehlt mir momentan beides...)?



  • ich würde auf den ersten blick sagen das du denkst du hast ein handle auf DLL A, hast aber in wirklichkeit eins auf DLL B.

    hast du beide DLLs gleich aufgebaut ? D.h. gleiche Funktionen zum aufrufen der dialogfelder in jeder DLL ? wenn nicht ist meine theorie sowieso quatsch ^^



  • Shit!
    Gestern 8 Stunden Fehlersuche.
    Wie in dem Link da oben beschrieben mal CExtDllState hier eingebaut, mal AFX_MANAGE_STATE(...) da ausprobiert, die ein oder andere ID verändert, RebuildAll ohne Ende, gebootet, ältere Versionen ausprobiert, eine Nacht nicht geschlafen und heute geht es auf einmal wieder.
    Ist ja schön und gut, aber ich hasse diese Zeitbomben!

    [edit] Ach ja, vielen Dank auch für den Tipp, da hätte ich jetzt weiter geforscht. [/edit]


  • Mod

    1. Warum verwendest Du nicht die Standard Funktion AFX_MANAGE_STATE um das zu erreichen. Dieser Artikel ist ein Nachbau des Originals. Ich ziehe das Original vor.
    2. Selbst in diesem Fall werden alle Extension Module nach IDs durchsucht. Du musst in jedem Fall die IDs getrennt halten. Ich habe dazu dokumentierte Bereiche.
    Zur Verwaltung nutze ich dazu http://www.riverblade.co.uk/products/resorg/index.html
    Dadurch werden auch neue IDs normalerweise in den korrekten Bereichen erzeugt.
    Siehe auch http://www.codeproject.com/macro/resorg.asp
    3. Als Grundlage ist dies auch leenswert
    http://msdn2.microsoft.com/en-us/library/6t3612sk(vs.71).aspx



  • Danke, das gucke ich mir mal an.
    AFX_MANAGE_STATE wird in den cpp der jeweiligen DLL benutzt.
    Das Problem ist einfach, das dieses Projekt hier schon fast 10 Jahre alt ist. Dementsprechend umfangreich ist es und es haben auch schon sehr viele Leute daran gearbeitet und teilweise programmieren gelernt. Hier sind mehr Leichen im Keller als auf jedem Friedhof. Da entwickelt sich ab und zu so eine Sebständigkeit. *seufz*


Anmelden zum Antworten