初學ATL...從頭開始吧
<B>#include <shlobj.h>
#include <comdef.h></B>
class ATL_NO_VTABLE CDLLRegShlExt :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CDLLRegShlExt, &CLSID_DllRegShlExt>,
<STRIKE>public IDllRegShlExt,</STRIKE>
<B>public IShellExtInit</B>
{
BEGIN_COM_MAP(CDLLRegShlExt)
<STRIKE>COM_INTERFACE_ENTRY(IDllRegShlExt)</STRIKE>
<B>COM_INTERFACE_ENTRY(IShellExtInit)</B>
END_COM_MAP()
template<
class ThreadModel
>
class CComObjectRootEx : public CComObjectRootBase
這里CComObjectRootEx是一個ATL的類
我看來大概是管理Com對象的一個類,是搞計數的吧,一個實現COM的類必須要繼承它的
它還是個模板類,模板參數是ThreadModel:
CComSingleThreadModel, CComMultiThreadModel, or CComMultiThreadModelNoCS. You can accept the server's default thread model by setting ThreadModel to CComObjectThreadModel or CComGlobalsThreadModel
A class that implements a COM server must inherit from CComObjectRootEx or CComObjectRoot.
template<
class T,
const CLSID* pclsid = &CLSID_NULL
>
class CComCoClass
CComCoClass的類應該之前
繼續加一些新的東西 看MSDN Magzine 關于COM的東西,提到一些對于rgs注冊腳本的使用前提
Way back in the November and December 1999 issues of Microsoft Systems Journal (now known as MSDN®Magazine), I showed how to build a Band Object for Internet Explorer using the Active Template Library (ATL) IRegistrar interface. (Band Objects need to register a special category CATID_DeskBand.) IRegistrar is a really cool tool that lets you write a registration script (.RGS file) to add your registry entries, instead of calling registry functions like RegOpenKey, RegSetValue, and the rest. Figure 1 shows a typical script.
這一段講IRegistrar接口的作用,hoho