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 schonmal

    gruß
    steff


  • Mod

    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( ));
    gefehlt

    danke danke
    gruß
    steff


Anmelden zum Antworten