Makale numarası: 173974 - Son Gözden Geçirme: 02 Haziran 2005 Perşembe - Gözden geçirme: 3.0

Visual C++ ATL projesinde MFC desteği ekleme

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

AppWizard kullanarak bir ATL EXE proje oluştururken, MFC desteğini onay kutusunu devre dışı bırakılır. Bu makalede, ATL EXE projesinde MFC desteği eklemek açıklar. Bu makalede ayrıca, başlangıçta "Destek MFC" onay kutusunu AppWizard seçilemedi ATL DLL projesinde MFC desteği eklemeniz açıklar.

Daha fazla bilgi

Bir ATL EXE Project'e MFC desteği ekleme

  1. Aşağıdaki ekleme # Atlbase.h dahil olmak üzere önce StdAfx.h yönergelerini içerir:
          #include <afxwin.h>   // MFC core and standard components
          #include <afxext.h>   // MFC extensions
          #include <afxdisp.h>  // MFC Automation extensions
    					
  2. MFC kullanılacak proje ayarlarını değiştirin. Project ayarları iletişim kutusunda, Genel sekmesini tıklatın ve MFC için "Microsoft Foundation Classes" liste kutusundaki ayarı değiştirebilirsiniz.
  3. CWinApp türetilmiş bir sınıf ekleyebilir ve bu tür genel değişken gibi bildirin:
    class CMyApp : public CWinApp
          {
          public:
             virtual BOOL InitInstance();
             virtual int ExitInstance();
          protected:
          BOOL m_bRun;
    };
    					
  4. _TWinMain işlevi aşağıdaki InitInstance ve ExitInstance kodla değiştirin:
    BOOL CMyApp::InitInstance()
    {
    	// Initialize OLE libraries.
    	if (!AfxOleInit())
    	{
    		AfxMessageBox(_T("OLE Initialization Failed!"));
    		return FALSE;
    	}
    
    	// Initialize CcomModule.
    	_Module.Init(ObjectMap, m_hInstance);
    	_Module.dwThreadID = GetCurrentThreadId();
    
    	// Check command line arguments.
    	TCHAR szTokens[] = _T("-/");
    	m_bRun = TRUE;
    	LPCTSTR lpszToken = FindOneOf(m_lpCmdLine, szTokens);
    	while (lpszToken != NULL)
    	{
    		// Register ATL and MFC class factories.
    		if (lstrcmpi(lpszToken, _T("Embedding"))==0 ||
    		lstrcmpi(lpszToken, _T("Automation"))==0)
    		{
    			AfxOleSetUserCtrl(FALSE);
    			break;
    		}
    	// Unregister servers.
    	// There is no unregistration code for MFC
    	// servers. Refer to <WWLINK TYPE="ARTICLE" VALUE="Q186212">Q186212</WWLINK> "How To  Unregister MFC
    	// Automation Servers" for adding unregistration
    	// code.
    		else if (lstrcmpi(lpszToken, _T("UnregServer"))==0)
    		{
    			VERIFY(SUCCEEDED(_Module.UpdateRegistryFromResource(IDR_ServerS2B, FALSE)));
    //Replace  IDR_ServerS2B with your project specific resource ID for the registry script resource
    			VERIFY(SUCCEEDED(_Module.UnregisterServer(TRUE)));
    			m_bRun = FALSE;
    			break;
    		}
    	// Register ATL and MFC objects in the registry.
    		else if (lstrcmpi(lpszToken, _T("RegServer"))==0)
    		{
    			VERIFY(SUCCEEDED(_Module.UpdateRegistryFromResource(IDR_ServerS2B, TRUE)));
    			VERIFY(SUCCEEDED(_Module.RegisterServer(TRUE)));
    			COleObjectFactory::UpdateRegistryAll();
    			m_bRun = FALSE;
    			break;
    		}
    		lpszToken = FindOneOf(lpszToken, szTokens);
    	}
    	if (m_bRun)
    	{
    		// Comment out the next line if not using VC 6-generated
    		// code.
    		_Module.StartMonitor();
    
    		VERIFY(SUCCEEDED(_Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE)));
    		VERIFY(COleObjectFactory::RegisterAll());
    		// To run the EXE standalone, you need to create a window
    		// and assign the CWnd* to m_pMainWnd.
    		LPCTSTR szClass = AfxRegisterWndClass(NULL);
    		m_pMainWnd = new CWnd;
    		m_pMainWnd->CreateEx(0, szClass, _T("SomeName"), 0, CRect(0, 0, 0, 0), NULL, 1234);
    	}
    	return TRUE;
    }
    
    int CMyApp::ExitInstance()
    {
    	// MFC's class factories registration is
    	// automatically revoked by MFC itself.
    	if (m_bRun)
    	{
    		_Module.RevokeClassObjects();
            Sleep(dwPause); //wait for any threads to finish
        }
    
        _Module.Term();
    	return 0;
    }
    					
  5. Unicode oluşturur için giriş noktası için Project ayarları</a0> iletişim kutusundaki <a1>bağlantı</a1> alanının <a1>Çıktı</a1> kategorisinde wWinMainCRTStartup olduğundan emin olun. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    125750  (http://support.microsoft.com/kb/125750/ ) Visual C++ için Unicode desteği olan bir MFC uygulaması oluşturmaya çalıştığınızda "çözülmemiş bir dış simge _WinMain@16" hata iletisi alıyorsunuz
  6. Aşağıdaki kod satırını başına kadar her üye işlevi pencere yordamı, bir COM arabirimi ekleyin ve işlevi için verilen:
    AFX_MANAGE_STATE(AfxGetAppModuleState());
    						
    AFX_MANAGE_STATE hakkında daha fazla bilgi için VC ++ çevrimiçi belgelere bakın.
ATL COM AppWizard projesinde MFC desteği ekleme hakkında daha fazla bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
181505  (http://support.microsoft.com/kb/181505/EN-US/ ) SORUN: ATL COM AppWizard .exe MFC desteği sunma kısmı veya tamamı ingilizce olan içeriğe işaret edebilir.

Bir ATL DLL Project'e MFC desteği ekleme

Yukarıdaki gelen 1-3 adımları izleyin.

  1. Kod AppWizard oluşturulan DllMain'içinde taşıma DLL_PROCESS_ATTACH ve DLL_PROCESS_DETACH CMyApp'ın InitInstance ve ExitInstance ve DllMain aşağıdaki gibi kaldırın:
          BOOL CMyApp::InitInstance()
          {
             _Module.Init(ObjectMap, m_hInstance);
             return CWinApp::InitInstance();
          }
    
     int CMyApp::ExitInstance()
    {
        // MFC's class factories registration is
        // automatically revoked by MFC itself.
        if (m_bRun)
            _Module.RevokeClassObjects();
    
    
    					
  2. Aşağıdaki kod satırını her üye işlevi COM arabirimi, pencere yordamı başlangıcına eklemek ve işlevi için verilen:
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    						
    Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    140850  (http://support.microsoft.com/kb/140850/ ) MFC kitaplık paylaşılan kullanarak işlevleri düzgün verme
Not: Tüm yap?lar bırakın, _ATL_MIN_CRT Önişlemci tanım kaldırılmış olduğundan emin olun. Bu tanımlar C/C++ sekmesini preprocessor kategorisinde Project ayarları</a1> iletişim kutusunda bulabilirsiniz.

Ne zaman, bir MFC türetilmiş bir sınıf ekleyerek, sınıf için bir ATL EXE ClassWizard kullanarak proje veya "MFC desteği" olmayan bir ATL DLL projesine derleyici, bir C2504 hata verecek.

Referanslar

Visual C++ 5.0 ile dahil MFCATL örnek.

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
186212  (http://support.microsoft.com/kb/186212/ ) Nasıl yapılır: MFC otomasyon sunucuları kaydı siliniyor
(c) 1997 Microsoft Corporation, tüm hakları saklıdır. Katkıyı Chuck Bell, Microsoft Corporation.


Bu makaledeki bilginin uygulandığı durum:
  • Microsoft ActiveX Template Library 3.0, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Template Library 2.0, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft ActiveX Template Library 2.1, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Anahtar Kelimeler: 
kbmt kbinfo kbhowto KB173974 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:173974  (http://support.microsoft.com/kb/173974/en-us/ )