Dialog erstellen in MFC DLL, aufgerufen von einer Win32 Konsolenanwendung

daha

Grünschnabel
Hallo,
aus meiner Win32 Konsolenanwendung rufe ich die Funktion "showFileTransferDialog" auf, die sich in einer MFC DLL befindet. MFC ist dynamisch angebunden. Das funktioniert soweit. Jedoch gibt m_Dialog->Create immer 0 zurück und ich weiß nicht warum.

Ich bin Anfänger in C++ und wäre für jede Hilfe dankbar, da ich schon lange nach meinem Problem gesucht habe und nicht fündig geworden bin.:(

Code:
CFileTransferDialog* CFileTransferApp::getFileTransferDialog()
{
	if(m_Dialog == NULL){
		m_Dialog = new CFileTransferDialog();		
		BOOL res = m_Dialog->Create(IDD_DIALOG, m_pMainWnd); //gibt immer 0 zurück? Warum?
		DWORD error = GetLastError();
		if(!res){
			AfxMessageBox(_T("Error creating Dialog"));
			closeDialog();
		}
		
	}
	return m_Dialog;
}

void CFileTransferApp::showDialog()
{
	CFileTransferDialog* dialog = getFileTransferDialog();
	if(dialog != NULL)
	{
		dialog->ShowWindow(SW_SHOW);
	}
}

void CFileTransferApp::closeDialog()
{
	if(m_Dialog != NULL){
		m_Dialog->DestroyWindow();
		delete(m_Dialog);
		m_Dialog = NULL;
	}
}

void CFileTransferApp::setProgress(float current, float total, int unit)
{
	if(m_Dialog != NULL){
		m_Dialog->setProgress(current, total, unit);
	}
}

/////////////////////////////////////////////////////////////////////////////
// Das einzige CFileTransferApp-Objekt

CFileTransferApp theApp;

extern "C"{
	DECLDIR void showFileTransferDialog()
	{
		AFX_MANAGE_STATE(AfxGetStaticModuleState());		
		theApp.showDialog();

	}

	DECLDIR void closeFileTransferDialog()
	{
		AFX_MANAGE_STATE(AfxGetStaticModuleState());
		theApp.closeDialog();

	}

	DECLDIR void setFileTransferProgress(float current, float total, int unit)
	{
		AFX_MANAGE_STATE(AfxGetStaticModuleState());
		theApp.setProgress(current, total, unit);
	}
}

Die DECLDIR Aufrufkonvention ist folgende:
#define DECLDIR __declspec(dllexport)
 
Bin bereits einen Schritt weiter und zwar startet der Dialog, wenn ich die ActiveX-Komponenten entferne. Nur leider brauche ich eine Progressbar und ein Label im Dialog. Muss hierfür eine andere Klasse als CDialog nehmen, existieren noch andere Steuerelemente oder habe ich im Code noch entwas vergessen?

Den Aufruf mit AfxEnableControlContainer(); habe ich schon probiert ...
Code:
DECLDIR void showFileTransferDialog()
	{
		AFX_MANAGE_STATE(AfxGetStaticModuleState());
		AfxEnableControlContainer();
		theApp.showDialog();

	}
 
Der Vollständigkeit halber ...
Es fehlte CoInitialize() in der InitInstance der App.

PS:
In ExitInstance() das CoUninitialize(); nicht vergessen.

Danke
 

Neue Beiträge

Zurück