"ATL シンプル オブジェクト" ウィザードでは、新しいクラスが既存のコクラスとそのインターフェイスから派生することを指定する方法が提供されません。Visual Studio 2008 で、既存のクラスから派生した新しい ATL COM クラスを作成するにはどうすればよいですか (つまり、 Base
implementsであり、その implementsから派生した新しいクラスIBase
を作成したいのですが、ここで、は from から派生しています)。Derived
Base
IDerived
IDerived
IBase
更新: 簡単に聞こえますが、ウィザードで生成された ATL クラスには、最大 6 つの基本クラス、COM マップ、接続ポイント マップがあります。これらの基本クラスとマップのどれを派生クラスで繰り返す必要がありますか? マップが派生クラスで繰り返される場合、基本クラス マップのコンテンツを含める必要がありますか、それとも追加のアイテムだけを含める必要がありますか? 基本クラスの順序は重要ですか? FinalConstruct()
とはどうFinalRelease()
ですか?派生クラスで繰り返す必要がDECLARE_PROTECT_FINAL_CONSTRUCT
ありますか?DECLARE_REGISTRY_RESOURCEID
すべてのボイラープレートを除いて空のサンプル基本クラスを次に示します。では、派生クラスはどのように見えるでしょうか?
class ATL_NO_VTABLE CBase :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CBase, &CLSID_Base>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CBase>,
public CProxy_IBaseEvents<CBase>,
public IDispatchImpl<IBase, &IID_IBase, &LIBID_ExampleLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CBase()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_Base)
BEGIN_COM_MAP(CBase)
COM_INTERFACE_ENTRY(IBase)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
END_COM_MAP()
BEGIN_CONNECTION_POINT_MAP(CBase)
CONNECTION_POINT_ENTRY(__uuidof(_IBaseEvents))
END_CONNECTION_POINT_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
};
OBJECT_ENTRY_AUTO(__uuidof(Base), CBase)