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.
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.
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
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.
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;
};
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;
}
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++
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
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();
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.
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/
)
Seberapa besar upaya Anda untuk menggunakan artikel ini?
Sangat sedikit
Sedikit
Sedang
Besar
Sangat besar
Berikan saran tentang apa yang dapat kami lakukan untuk menyempurnakan informasi ini
Terima kasih! Masukan Anda akan digunakan untuk membantu kami meningkatkan konten dukungan. Untuk opsi bantuan lainnya, kunjungi Halaman Beranda Bantuan dan Dukungan.