 |
|
 |
 | MFC Tips - General |  |
Trimis: 19/07/2007 16:17 |
|
|
| Ad_Infinitum |
| Administrator |

 |
 |
| Data inscrierii: 23/Iun/2007 |
| Mesaje: 212 |
|
|
|
 |
 |
 |
|
Cum folosim MFC intr-o aplicatie Win32?
Problema
Avem o aplicatie deja dezvoltata de tip Win32 fara MFC si la un momentdat vrem sa folosim, pentru simplitate si usurinta, ceva "marfa", functii sau clase din MFC.
Deci, schimbam setarile proiectului din "Not using MFC" in "Using MFC in a Shared DLL", stergem include-ul pentru <windows.h> si adaugam pe cele necesare pentru MFC, repectiv <afxwin.h> si <afxext.h>.
OK. Proiectul se compileaza acum fara probleme.
Insa la run-time unele chestii merg iar altele intra in balarii.
Exemplu
| Citat: |
// MyWin32App.cpp
// #include <windows.h>
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
CString strText = _T("Un text de test");
AfxMessageBox(strText); // <-- OK, it works till here.
CFileDialog dlg(TRUE);
if(IDOK==dlg.DoModal()) // <-- Oups!!! ASSERT
{
// ...
}
// ...
return 0;
}
|
Rezolvare
Am mai ramas un mic amanunt de rezolvat ceea ce framework-ul MFC face by default si anume ca, inainte de indiferent ce alt apel din MFC, sa-l initializam cu functia AfxWinInit.
Exemplu
| Citat: |
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
BOOL bRet = AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
if(! bRet)
{
TRACE0(_T("Initializing MFC failed"));
return -1;
}
// ...
// ... Further, enjoy of MFC!...
// ...
return 0;
}
|
NOTE: Aceiasi metoda se aplica si in cazul aplicatiilor tip consola. |
|
|
|
|
|
|
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro
|
|