dialog ohne mainwindow
-
hi,
ich habe einen comclient in eine dll implementiert.
jedoch muss ich nun ein file auswählen können.
dazu habe ich die mfc-libs eingebunden (afx) und einen dialog erstellt (CFileDialog).
wenn ich nun ein debug-build habe, kommt immer beim aufruf des konstruktors ein debug-assert-fehler den ich aber einfach ignorieren kann und alles funktioniert. im release-build erscheind es garnicht.denke es liegt daran, dass ich kein parent-wnd habe, sondern nur ein filedialog aus dem nichts heraus öffne.
kann man dies ändern? ohne dass ich eine windowsapplikation daraus mache? auf einem anderen pc erfolgt garkeine assert-meldung.
zusätzlich habe ich einen dialog erstellt. die klasse erbt von CDialog. da funktioniert der konstruktor einwandfrei, nur bei DoModal() kommt auch der fehler und zwar bei folgendem code...
INT_PTR CDialog::DoModal() { // can be constructed with a resource template or InitModalIndirect ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL || m_lpDialogTemplate != NULL); // load resource as necessary LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate; HGLOBAL hDialogTemplate = m_hDialogTemplate; HINSTANCE hInst = AfxGetResourceHandle(); if (m_lpszTemplateName != NULL) { hInst = AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG); HRSRC hResource = ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG); hDialogTemplate = LoadResource(hInst, hResource); } if (hDialogTemplate != NULL) lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate); // return -1 in case of failure to load the dialog template resource if (lpDialogTemplate == NULL) return -1;und zwar einmal bei "AfxGetResourceHandle" (hier übrigens auch das bei filedialog) und dann nochmal 2 mal bei "AfxFindResourceHandle"!!
jedoch erscheind hier der dialog net, weil er dann mit -1 returniert !!kann mir da jemand helfen?
danke schonmalgruß
steff
-
Zwei Optionen:
1. Hast Du in Deiner DLL Funktion auch bei Eingang der Funktion AFX_MANAGE_STATE aufgerufen?
2. AfxGetResourceHandle liefert einen ASSERT wenn es nicht gesetzt ist. Bei korrekter Initialisierung ist es aber grundsätzlich gesetzt.
Wie hast Du die DLL gebaut. Per MFC-Wizard oder nachträglich MFC ergänzt?
Evtl.wird die MFC eigene DllMain nicht aufgerufen.
Es gibt immer wieder Programmierer, die Lik Fehler mit der DllMain bekommen, das Problem nicht beheben, sondern einfach die Warnungen ausschalten...
:xmas2:
-
SUPER ... vielen dank
hat einfach nur
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
gefehltdanke danke
gruß
steff