|
¾È³çÇϼ¼¿ä ¿ìÁ¤¹ÎÀÔ´Ï´Ù.
ATL EXE ¿¡¼ MFC ¸¦ »ç¿ëÇÒ·Á°í ¿©±â Àú±â ã¾Æ º¸´Ù°¡ ¾î·Æ°Ô ¹æ¹ýÀ» ã¾Æ¼ ¿©±â¿¡ ÆÁÀ¸·Î ¿Ã¸³´Ï´Ù.
1. ÀÏ´Ü ATL ÇÁ·ÎÁ§Æ®¸¦ Çϳª »ý¼ºÇÕ´Ï´Ù.
2. ATL ÇÁ·ÎÁ§Æ® ¸¶¹ý»ç¿¡¼ ´ÙÀ½ ±×¸²°ú °°ÀÌ ¼³Á¤ÇϽðí [¸¶Ä§] ¹öưÀ» ´©¸¨´Ï´Ù.

3. ATL ÄÁÆ®·ÑÀ» Çϳª ¸¸µé¾î Áֽñ¸¿ä...
4. stdafx.h Çì´õ ÆÄÀÏ¿¡ ´ÙÀ½ Çì´õ ÆÄÀÏÀ» ÀÎŬ·çµå ÇÕ´Ï´Ù.
#include <afxwin.h> // MFC core and standard components #include <afxext.h> // MFC extensions #include <afxdisp.h> // MFC Automation extensions
5. ¼Ó¼º ÆäÀÌÁö¿¡¼ "MFC »ç¿ë " À» [Ç¥ÁØWindows ¶óÀ̺귯¸® »ç¿ë] -> [°øÀ¯ DLL ¿¡¼ MFC »ç¿ë] À¸·Î ¼³Á¤ÇÕ´Ï´Ù.
±×¸®°í È®ÀÎ.

6. ±âÁ¸ÀÇ COM Module °ú WinMain À» Á¦°ÅÇÕ´Ï´Ù.
CxxxxModule Ŭ·¡½º ¼±¾ðÀ¸·Î À̵¿ÇÕ´Ï´Ù.
class CATLEXEModule : public CAtlExeModuleT< CATLEXEModule > { public : DECLARE_LIBID(LIBID_ATLEXELib) DECLARE_REGISTRY_APPID_RESOURCEID(IDR_ATLEXE, "{2FFE4EAD-E7A1-49D6-9D09-B14CE4803B6C}") };
CATLEXEModule _AtlModule;
// extern "C" int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPTSTR /*lpCmdLine*/, int nShowCmd) { return _AtlModule.WinMain(nShowCmd); }
¿ä·¸°Ô µÇ¾î ÀÖ´Â ³ðÀ» ÁÖ¼®Ã³¸®ÇØ Áֽñ¸¿ä....
¾Æ·¡Ã³·³ ÄÚµùÇØ ÁÖ¸é µË´Ï´Ù.
»¡°£»ö ºÎºÐÀº ¿ø·¡ ¼Ò½º¿¡ ÀÖ´Â ³»¿ëÀ» ±×´ë·Î °¡Á®´Ù ¾²´Â °Ì´Ï´Ù.
7. »õ·Î¿î COM Module °ú CWinApp ¸¦ ¸¸µé¾î ÁÝ´Ï´Ù.
class CATLEXEModule : public CAtlMfcModule { public: DECLARE_LIBID(LIBID_ATLEXELib) DECLARE_REGISTRY_APPID_RESOURCEID(IDR_ATLEXE, "{2FFE4EAD-E7A1-49D6-9D09-B14CE4803B6C}") };
CATLEXEModule _AtlModule;
class CATLEXEApp : public CWinApp { public: virtual BOOL InitInstance(); virtual int ExitInstance(); #ifdef _DEBUG CDialog m_dlg; #endif};
CATLEXEApp theApp;
BOOL CATLEXEApp::InitInstance() { // Initialize OLE libraries. if (!AfxOleInit()) { AfxMessageBox(_T("OLE Initialization Failed!")); return FALSE; }
// Parse command line for standard shell commands, // DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); #if !defined(_WIN32_WCE) || defined(_CE_DCOM) // Register class factories via CoRegisterClassObject(). if (FAILED(_AtlModule.RegisterClassObjects(CLSCTX_LOCAL_SERVER, /*REGCLS_MULTIPLEUSE*/ REGCLS_SINGLEUSE ))) return FALSE; #endif // !defined(_WIN32_WCE) || defined(_CE_DCOM) //// App was launched with /Embedding or /Automation switch. //// Run app as automation server. if (cmdInfo.m_bRunEmbedded || cmdInfo.m_bRunAutomated) { // Don't show the main window return TRUE; } // App was launched with /Unregserver or /Unregister switch. if (cmdInfo.m_nShellCommand == CCommandLineInfo::AppUnregister) { _AtlModule.UpdateRegistryAppId(FALSE); _AtlModule.UnregisterServer(TRUE); return FALSE; } // App was launched with /Register or /Regserver switch. if (cmdInfo.m_nShellCommand == CCommandLineInfo::AppRegister) { _AtlModule.UpdateRegistryAppId(TRUE); _AtlModule.RegisterServer(TRUE); return FALSE; }
#ifdef _DEBUG m_dlg.Create(IDD_DIALOG_TEMP,NULL); // ´ÙÀ̾ó·Î±× ¸®¼Ò½º ID this->m_pMainWnd = &m_dlg; #endif return TRUE; }
int CATLEXEApp::ExitInstance() { #if !defined(_WIN32_WCE) || defined(_CE_DCOM) _AtlModule.RevokeClassObjects(); #endif
#ifdef _DEBUG m_dlg.DestroyWindow(); #endif
return CWinApp::ExitInstance(); }
¼Ò½º¸¦ ¿ä·¸°Ô ¹Ù²Ù¾î ÁÖ¸é µË´Ï´Ù.
8. µð¹ö±ëÀ» À§Çؼ´Â InitInstance ¿¡¼ ´ÙÀ̾ó·Î±×¸¦ Çϳª º¸ÀÌÁö ¾Ê°Ô ¸¸µé¾î ÁÖ¸é µË´Ï´Ù.
9. ÇÔ¼ö¿¡¼ AFX_MANAGE_STATE(AfxGetAppModuleState()); ¸¦ »ç¿ëÇÏ½Ã¸é ³¡ÀÔ´Ï´Ù.
ÀÌ»óÀÔ´Ï´Ù.
Âü°í
http://support.microsoft.com/kb/173974 |