ID Artikel: 173974 - Kajian Terakhir: 16 September 2011 - Revisi: 2.0

Bagaimana menambahkan dukungan MFC ATL proyek di Visual C++

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

Ketika membuat sebuah proyek ATL EXE yang menggunakan AppWizard, Kotak centang dukungan MFC dinonaktifkan. Artikel ini menjelaskan cara untuk menambahkan dukungan MFC untuk proyek ATL EXE. Artikel ini juga menjelaskan cara untuk menambahkan dukungan MFC Proyek ATL DLL jika Anda gagal untuk awalnya memilih kotak centang "mendukung MFC" di AppWizard.

INFORMASI LEBIH LANJUT

Menambahkan MFC dukungan untuk proyek ATL EXE

  1. Tambahkan berikut # termasuk arahan untuk StdAfx.h sebelum termasuk Atlbase.h:
          #include <afxwin.h>   // MFC core and standard components
          #include <afxext.h>   // MFC extensions
          #include <afxdisp.h>  // MFC Automation extensions
    					
  2. Mengubah pengaturan proyek untuk menggunakan MFC. Dari Seting Proyek kotak dialog, klik General tab, dan mengubah pengaturan di "Microsoft Foundation Classes"daftar kotak untuk MFC.
  3. Menambahkan kelas CWinApp diturunkan dan mendeklarasikan variabel global dari jenis sebagai berikut:
    class CMyApp : public CWinApp
          {
          public:
             virtual BOOL InitInstance();
             virtual int ExitInstance();
          protected:
          BOOL m_bRun;
    };
    					
  4. Menggantikan fungsi _tWinMain dengan berikut InitInstance dan ExitInstance kode:
    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. Untuk membangun Unicode, pastikan entry point diatur ke wWinMainCRTStartup di Keluaran Kategori Link lapangan di Seting Proyek kotak dialog. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
    125750  (http://support.microsoft.com/kb/125750/ ) Anda menerima pesan galat "belum terselesaikan eksternal simbol _WinMain@16" ketika Anda mencoba untuk membangun aplikasi MFC dukungan Unicode in Visual C++
  6. Menambahkan baris kode berikut untuk permulaan setiap fungsi anggota COM antarmuka, jendela prosedur dan diekspor fungsi:
    AFX_MANAGE_STATE(AfxGetAppModuleState());
    						
    Untuk informasi lebih lanjut tentang AFX_MANAGE_STATE, berkonsultasi VC ++ online dokumentasi.
Untuk informasi lebih lanjut tentang menambahkan dukungan MFC ATL COM AppWizard proyek, silakan lihat artikel berikut dalam Pengetahuan Microsoft Base:
181505  (http://support.microsoft.com/kb/181505/EN-US/ ) PRB: ATL COM AppWizard tidak menawarkan MFC dukungan untuk.EXE

Menambahkan MFC dukungan untuk proyek ATL DLL

Ikuti langkah-langkah 1 sampai 3 dari atas.

  1. Bergerak kode dalam DllMain AppWizard yang dihasilkan DLL_PROCESS_ATTACH dan DLL_PROCESS_DETACH untuk CMyApp InitInstance dan ExitInstance dan menghapus DllMain sebagai berikut:
          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. Menambahkan baris kode berikut untuk permulaan setiap fungsi anggota COM antarmuka, jendela prosedur dan diekspor fungsi:
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    						
    Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
    140850  (http://support.microsoft.com/kb/140850/ ) Cara benar ekspor fungsi dengan menggunakan MFC Shared Library
CATATAN: Untuk semua rilis membangun, memastikan bahwa _ATL_MIN_CRT definisi Preprocessor telah dihapus. Anda dapat menemukan definisi ini di Preprocessor Kategori C/C ++ tab di Seting Proyek kotak dialog.

Ketika menambahkan kelas yang diturunkan dari MFC kelas menggunakan ClassWizard untuk proyek ATL EXE atau proyek ATL DLL tanpa "MFC dukungan," kompilator akan mengeluarkan kesalahan C2504.

REFERENSI

MFCATL sampel disertakan dengan Visual C++ 5.0.

Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
186212  (http://support.microsoft.com/kb/186212/ ) Bagaimana menghapus registrasi server Otomatisasi MFC
(c) Microsoft Corporation 1997, All Rights Reserved. Kontribusi oleh Chuck Bell, Microsoft Corporation.


Berlaku bagi:
  • Microsoft ActiveX Template Library 3.0, ketika digunakan dengan:
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
Kata kunci: 
kbinfo kbhowto kbmt KB173974 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:173974  (http://support.microsoft.com/kb/173974/en-us/ )