{"id":1224,"date":"2012-10-23T16:24:52","date_gmt":"2012-10-23T08:24:52","guid":{"rendered":"http:\/\/115.29.108.60\/?p=1224"},"modified":"2012-10-23T16:24:52","modified_gmt":"2012-10-23T08:24:52","slug":"atl%e7%a2%8e%e8%af%adcatlmodule-catlbasemodule","status":"publish","type":"post","link":"http:\/\/115.29.108.60\/?p=1224","title":{"rendered":"ATL\u788e\u8bedCAtlModule CAtlBaseModule"},"content":{"rendered":"<p>\/\/ CAtlModule\u6a21\u5757\u57fa\u7c7b<br \/>\n__declspec(selectany) CAtlModule* _pAtlModule = NULL;\u00a0\/\/ \u5168\u5c40\u53d8\u91cf, \u4ee3\u8868\u4e00\u4e2a\u6a21\u5757<\/p>\n<p>struct _ATL_MODULE70<br \/>\n{<br \/>\n\u00a0UINT cbSize;<br \/>\n\u00a0LONG m_nLockCnt;<br \/>\n\u00a0_ATL_TERMFUNC_ELEM* m_pTermFuncs;<br \/>\n\u00a0CComCriticalSection m_csStaticDataInitAndTypeInfo;<br \/>\n};<br \/>\ntypedef _ATL_MODULE70 _ATL_MODULE;<\/p>\n<p>class ATL_NO_VTABLE CAtlModule : public _ATL_MODULE<br \/>\n{<br \/>\n\u00a0CAtlModule() throw()<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0\/\/ Should have only one instance of a class<br \/>\n\u00a0\u00a0\/\/ derived from CAtlModule in a project.<br \/>\n\u00a0\u00a0\/\/ \u4e00\u4e2a\u5de5\u7a0b\u4e2d\u4ec5\u6709\u4e00\u4e2aCAtlModule\u5b50\u7c7b\u7684\u5b9e\u4f8b<br \/>\n\u00a0\u00a0\/\/ \u5176\u4e00\u822c\u4e5f\u662f\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf, \u56e0\u4e3a\u5b83\u4f1a\u88ab\u8d4b\u503c\u7ed9_pAtlModule<br \/>\n\u00a0\u00a0ATLASSERT(_pAtlModule == NULL);<br \/>\n\u00a0\u00a0\/\/ _ATL_MODULE\u4e2d\u7684\u53d8\u91cf\u521d\u59cb\u5316<br \/>\n\u00a0\u00a0cbSize = 0;<br \/>\n\u00a0\u00a0m_nLockCnt = 0;<br \/>\n\u00a0\u00a0m_pTermFuncs = NULL;<br \/>\n\u00a0\u00a0<br \/>\n\u00a0\u00a0_pAtlModule = this;\u00a0\/\/ \u8d4b\u503c\u7ed9_pAtlModule<br \/>\n\u00a0\u00a0<br \/>\n\u00a0\u00a0m_pGIT = NULL;<\/p>\n<p>\u00a0\u00a0if (FAILED(m_csStaticDataInitAndTypeInfo.Init()))<br \/>\n\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\/\/ \u6ce8\u610f\u6b64if\u5757\u4e2d\u8fd4\u56de\u65f6, _pAtlModule\u5df2\u88ab\u8d4b\u503c\u4e00\u4e2a\u5931\u8d25\u521d\u59cb\u5316\u7684\u5bf9\u8c61<br \/>\n\u00a0\u00a0\u00a0ATLTRACE(atlTraceGeneral, 0, _T(&#8220;ERROR : Unable to initialize critical section in CAtlModule\\n&#8221;));<br \/>\n\u00a0\u00a0\u00a0ATLASSERT(0);<br \/>\n\u00a0\u00a0\u00a0CAtlBaseModule::m_bInitFailed = true;<br \/>\n\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0}<\/p>\n<p>\u00a0\u00a0\/\/ Set cbSize on success.<br \/>\n\u00a0\u00a0cbSize = sizeof(_ATL_MODULE);<br \/>\n\u00a0}<br \/>\n};<\/p>\n<p>\/\/ CAtlBaseModule\u7684\u5b9a\u4e49\u548c\u5b9e\u73b0\u5206\u522b\u5728VC\\atlmfc\\include\\atlcore.h\u548cVC\\atlmfc\\src\\atl\\atls\\atlbase.cpp\u4e2d<br \/>\n\/\/ atlbase.cpp\u5b9a\u4e49\u4e86\u5176\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf_AtlBaseModule<br \/>\n#pragma init_seg( lib )<br \/>\nCAtlBaseModule\u00a0_AtlBaseModule;<br \/>\nextern CAtlWinModule _AtlWinModule = CAtlWinModule();<\/p>\n<p>struct _ATL_BASE_MODULE70<br \/>\n{<br \/>\n\u00a0UINT cbSize;<br \/>\n\u00a0HINSTANCE m_hInst;<br \/>\n\u00a0HINSTANCE m_hInstResource;<br \/>\n\u00a0bool m_bNT5orWin98;<br \/>\n\u00a0DWORD dwAtlBuildVer;<br \/>\n\u00a0const GUID* pguidVer;<br \/>\n\u00a0CComCriticalSection m_csResource;<br \/>\n\u00a0CSimpleArray&lt;HINSTANCE&gt; m_rgResourceInstance;<br \/>\n};<br \/>\ntypedef _ATL_BASE_MODULE70 _ATL_BASE_MODULE;<\/p>\n<p>class CAtlBaseModule : public _ATL_BASE_MODULE<br \/>\n{<br \/>\n\u00a0CAtlBaseModule::CAtlBaseModule() throw()<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0cbSize = sizeof(_ATL_BASE_MODULE);<\/p>\n<p>\u00a0\u00a0m_hInst = m_hInstResource = reinterpret_cast&lt;HINSTANCE&gt;(&amp;__ImageBase);<\/p>\n<p>\u00a0\u00a0m_bNT5orWin98 = false;<br \/>\n\u00a0\u00a0OSVERSIONINFO version;<br \/>\n\u00a0\u00a0memset(&amp;version, 0, sizeof(version));<br \/>\n\u00a0\u00a0version.dwOSVersionInfoSize = sizeof(version);<br \/>\n\u00a0\u00a0::GetVersionEx(&amp;version);<br \/>\n\u00a0\u00a0if(version.dwPlatformId == VER_PLATFORM_WIN32_NT)<br \/>\n\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0if(version.dwMajorVersion &gt;= 5)<br \/>\n\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0m_bNT5orWin98 = true;<br \/>\n\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0}<br \/>\n\u00a0\u00a0else if(version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)<br \/>\n\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0if((version.dwMajorVersion &gt; 4) || ((version.dwMajorVersion == 4) &amp;&amp;<br \/>\n\u00a0\u00a0\u00a0\u00a0(version.dwMinorVersion &gt; 0)))<br \/>\n\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0m_bNT5orWin98 = true;<br \/>\n\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0}<\/p>\n<p>\u00a0\u00a0dwAtlBuildVer = _ATL_VER;<br \/>\n\u00a0\u00a0pguidVer = &amp;GUID_ATLVer70;<\/p>\n<p>\u00a0\u00a0if (FAILED(m_csResource.Init()))<br \/>\n\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0ATLTRACE(atlTraceGeneral, 0, _T(&#8220;ERROR : Unable to initialize critical section in CAtlBaseModule\\n&#8221;));<br \/>\n\u00a0\u00a0\u00a0ATLASSERT(0);<br \/>\n\u00a0\u00a0\u00a0CAtlBaseModule::m_bInitFailed = true;<br \/>\n\u00a0\u00a0}<br \/>\n\u00a0}<br \/>\n}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\/\/ CAtlModule\u6a21\u5757\u57fa\u7c7b __declspec(selectany) CAtlModule* _pA [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,16],"tags":[],"class_list":["post-1224","post","type-post","status-publish","format-standard","hentry","category-cplusplus","category-com"],"_links":{"self":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/1224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1224"}],"version-history":[{"count":1,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/1224\/revisions"}],"predecessor-version":[{"id":1225,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/1224\/revisions\/1225"}],"wp:attachment":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1224"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}