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.
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
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.
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;
};
_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;
}
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
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.
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();
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.
Ö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/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.