00001
00002
00003
00004
00005 #ifndef __COMBASE__
00006 #define __COMBASE__
00007
00008 typedef REGPINTYPES
00009 AMOVIESETUP_MEDIATYPE, * PAMOVIESETUP_MEDIATYPE, * FAR LPAMOVIESETUP_MEDIATYPE;
00010
00011 typedef REGFILTERPINS
00012 AMOVIESETUP_PIN, * PAMOVIESETUP_PIN, * FAR LPAMOVIESETUP_PIN;
00013
00014 typedef struct _AMOVIESETUP_FILTER
00015 {
00016 const CLSID * clsID;
00017 const WCHAR * strName;
00018 DWORD dwMerit;
00019 UINT nPins;
00020 const AMOVIESETUP_PIN * lpPin;
00021 }
00022 AMOVIESETUP_FILTER, * PAMOVIESETUP_FILTER, * FAR LPAMOVIESETUP_FILTER;
00023
00024 extern HINSTANCE g_hInst;
00025
00026 extern DWORD g_amPlatform;
00027 extern OSVERSIONINFO g_osInfo;
00028
00029 #ifndef INONDELEGATINGUNKNOWN_DEFINED
00030 DECLARE_INTERFACE(INonDelegatingUnknown)
00031 {
00032 STDMETHOD(NonDelegatingQueryInterface) (THIS_ REFIID, LPVOID *) PURE;
00033 STDMETHOD_(ULONG, NonDelegatingAddRef)(THIS) PURE;
00034 STDMETHOD_(ULONG, NonDelegatingRelease)(THIS) PURE;
00035 };
00036 #define INONDELEGATINGUNKNOWN_DEFINED
00037 #endif
00038
00039 typedef INonDelegatingUnknown *PNDUNKNOWN;
00040
00041 class CBaseObject
00042 {
00043
00044 private:
00045
00046
00047
00048
00049 CBaseObject(const CBaseObject& objectSrc);
00050 void operator=(const CBaseObject& objectSrc);
00051
00052 private:
00053 static LONG m_cObjects;
00054
00055 protected:
00056 #ifdef DEBUG
00057 DWORD m_dwCookie;
00058 #endif
00059
00060 public:
00061
00062
00063
00064 CBaseObject(const TCHAR *pName);
00065 #ifdef UNICODE
00066 CBaseObject(const char *pName);
00067 #endif
00068 ~CBaseObject();
00069
00070
00071
00072 static LONG ObjectsActive() {
00073 return m_cObjects;
00074 };
00075 };
00076
00077 class AM_NOVTABLE CUnknown : public INonDelegatingUnknown,
00078 public CBaseObject
00079 {
00080 private:
00081 const LPUNKNOWN m_pUnknown;
00082
00083 protected:
00084 volatile LONG m_cRef;
00085
00086 public:
00087
00088 CUnknown(const TCHAR *pName, LPUNKNOWN pUnk);
00089 virtual ~CUnknown() {};
00090
00091
00092
00093 CUnknown(TCHAR *pName, LPUNKNOWN pUnk,HRESULT *phr);
00094 #ifdef UNICODE
00095 CUnknown(const char *pName, LPUNKNOWN pUnk);
00096 CUnknown(char *pName, LPUNKNOWN pUnk,HRESULT *phr);
00097 #endif
00098
00099
00100
00101 LPUNKNOWN GetOwner() const {
00102 return m_pUnknown;
00103 };
00104
00105
00106
00107
00108
00109
00110
00111 STDMETHODIMP NonDelegatingQueryInterface(REFIID, void **);
00112 STDMETHODIMP_(ULONG) NonDelegatingAddRef();
00113 STDMETHODIMP_(ULONG) NonDelegatingRelease();
00114 };
00115
00116 STDAPI GetInterface(LPUNKNOWN pUnk, void **ppv);
00117
00118 typedef CUnknown *(CALLBACK *LPFNNewCOMObject)(LPUNKNOWN pUnkOuter, HRESULT *phr);
00119
00120 typedef void (CALLBACK *LPFNInitRoutine)(BOOL bLoading, const CLSID *rclsid);
00121
00122 class CFactoryTemplate {
00123
00124 public:
00125
00126 const WCHAR * m_Name;
00127 const CLSID * m_ClsID;
00128 LPFNNewCOMObject m_lpfnNew;
00129 LPFNInitRoutine m_lpfnInit;
00130 const AMOVIESETUP_FILTER * m_pAMovieSetup_Filter;
00131
00132 BOOL IsClassID(REFCLSID rclsid) const {
00133 return (IsEqualCLSID(*m_ClsID,rclsid));
00134 };
00135
00136 CUnknown *CreateInstance(LPUNKNOWN pUnk, HRESULT *phr) const {
00137 CheckPointer(phr,NULL);
00138 return m_lpfnNew(pUnk, phr);
00139 };
00140 };
00141
00142 #define DECLARE_IUNKNOWN \
00143 STDMETHODIMP QueryInterface(REFIID riid, void **ppv) { \
00144 return GetOwner()->QueryInterface(riid,ppv); \
00145 }; \
00146 STDMETHODIMP_(ULONG) AddRef() { \
00147 return GetOwner()->AddRef(); \
00148 }; \
00149 STDMETHODIMP_(ULONG) Release() { \
00150 return GetOwner()->Release(); \
00151 };
00152
00153 HINSTANCE LoadOLEAut32();
00154
00155 #endif
00156