Nicht Modaler Dlg in einer DLL...



  • Servus,

    ich habe hier ein kleines Problem. Es dreht sich um einen nicht modalen Dialog in einer DLL. Ich habe mir eine kleine DLL erstellt und in dieser eine Klasse erzeugt, welche von CDialog abgeleitet ist.

    In der Dll selbst rufe ich den Dialog nicht modal auf:

    CWriteExcelDlg *pExcDlg = new CWriteExcelDlg;
    pExcDlg->Create(IDD_WRITEEXCELDLG);
    pExcDlg->ShowWindow(SW_SHOW);
    

    Die Dll wird Dynamisch in einem anderen Projekt erfasst. Ich rufe von dem einen Programm über eine Funktion, welche in der Dll vorhanden ist, diesen Dialog auf. Dlg Resourcen sind in der DLL enthalten.

    Leider gibt er mir einen kleinen Fehler aus wenn ich den Dlg von meinem Programm aufrufen will. Er spuckt ne Assert an der Stelle dlgcore.cpp:

    BOOL CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
    {
    	ASSERT(IS_INTRESOURCE(lpszTemplateName) ||
    		AfxIsValidString(lpszTemplateName));
    
    	m_lpszTemplateName = lpszTemplateName;  // used for help
    	if (IS_INTRESOURCE(m_lpszTemplateName) && m_nIDHelp == 0)
    		m_nIDHelp = LOWORD((DWORD_PTR)m_lpszTemplateName);
    
    #ifdef _DEBUG
    	if (!_AfxCheckDialogTemplate(lpszTemplateName, FALSE))
    	{
    		ASSERT(FALSE);          // invalid dialog template name
    		PostNcDestroy();        // cleanup if Create fails too soon
    		return FALSE;
    	}
    #endif //_DEBUG
    
    	HINSTANCE hInst = AfxFindResourceHandle(lpszTemplateName, RT_DIALOG);
    	HRSRC hResource = ::FindResource(hInst, lpszTemplateName, RT_DIALOG);
    	HGLOBAL hTemplate = LoadResource(hInst, hResource);
    	BOOL bResult = CreateIndirect(hTemplate, pParentWnd, hInst);
    	FreeResource(hTemplate);
    
    	return bResult;
    }
    

    und sagt mir das der Resourcenname des Dialoges ungültig ist. Das sagt mir also das er auf die Resourcen des Hauptprogramms zugreift von dem die Dll aufgerufen wird. (Hab ich getest indem ich einfach die Kennzahl der DlgResource in eine Kennzahl einer DlgResource von meinem Programm geändert habe. In dem Fall hat er den Dialog meines HP aufgreufen)

    Habe mich hier schon durch 2 dicke Wälzer durchgearbeitet doch schlauer bin ich trotzdem nicht.

    Vielleicht kann mir hier jemand weiterhelfen bzw. mir das erklären....

    Bin für jede Hilfe, Anregung dankbar..

    *THX*
    Hellsgore



  • Ein AFX_MANAGE_STATE(AfxGetStaticModuleState()); ist aufegrufen bevor du anfängst in der DLL mit irgend welche resorucen rumzuhandwerken?



  • Ich hohle Frucht............

    Dank dir 1000x 👍 .....

    Das wars jetzt funzt es...

    *THX*
    Hellsgore



  • Ich hohle Frucht............

    👍 👍


Anmelden zum Antworten