[VC++] Cum folosim MFC intr-o aplicatie Win32?

Mediul de dezvoltare Visual C++, instalare, setari, debugger, compilator, linker si documentatie (forum moderat)
Post Reply
User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

[VC++] Cum folosim MFC intr-o aplicatie Win32?

Post by Ovidiu Cucu » 15 May 2008, 23:43

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

Code: Select all

// 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 orice alt apel din MFC, sa-l initializam cu functia AfxWinInit.

Exemplu

Code: Select all

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.

Next FAQ >>



Post Reply