//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
//  
#pragma once


// Dokument CAssemblyDoc
interface IMetaDataImport;
interface IMetaDataDispenserEx;

class CAssemblyDoc : public CDocument
{
	DECLARE_DYNCREATE(CAssemblyDoc)

public:
	CAssemblyDoc();
	virtual ~CAssemblyDoc();
	virtual void Serialize(CArchive& ar);   // zastąpienie dla dokumentu i/o
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif
	IMetaDataImport* MetaDataImportInterface()
	{
		if(m_pImport != NULL)
		{
			m_pImport->AddRef();
			return m_pImport;
		}
		else
			return NULL;
	}
	IMetaDataDispenserEx* MetaDataDispenserInterface()
	{
		if(m_pDisp != NULL)
		{
			m_pDisp->AddRef();
			return m_pDisp;
		}
		else
			return NULL;
	}
protected:

	DECLARE_MESSAGE_MAP()
public:
	virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);

private:
	CString m_sAssemblyPath;
	IMetaDataImport *m_pImport;
	IMetaDataDispenserEx *m_pDisp;
};
