亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? combase.h

?? 用DirectX制作高級動畫-[Advanced.Animation.with.DirectX]
?? H
字號:
//------------------------------------------------------------------------------
// File: ComBase.h
//
// Desc: DirectShow base classes - defines a class hierarchy for creating
//       COM objects.
//
// Copyright (c) 1992-2002 Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------------------------


/*

a. Derive your COM object from CUnknown

b. Make a static CreateInstance function that takes an LPUNKNOWN, an HRESULT *
   and a TCHAR *. The LPUNKNOWN defines the object to delegate IUnknown calls
   to. The HRESULT * allows error codes to be passed around constructors and
   the TCHAR * is a descriptive name that can be printed on the debugger.

   It is important that constructors only change the HRESULT * if they have
   to set an ERROR code, if it was successful then leave it alone or you may
   overwrite an error code from an object previously created.

   When you call a constructor the descriptive name should be in static store
   as we do not copy the string. To stop large amounts of memory being used
   in retail builds by all these static strings use the NAME macro,

   CMyFilter = new CImplFilter(NAME("My filter"),pUnknown,phr);
   if (FAILED(hr)) {
       return hr;
   }

   In retail builds NAME(_x_) compiles to NULL, the base CBaseObject class
   knows not to do anything with objects that don't have a name.

c. Have a constructor for your object that passes the LPUNKNOWN, HRESULT * and
   TCHAR * to the CUnknown constructor. You can set the HRESULT if you have an
   error, or just simply pass it through to the constructor.

   The object creation will fail in the class factory if the HRESULT indicates
   an error (ie FAILED(HRESULT) == TRUE)

d. Create a FactoryTemplate with your object's class id and CreateInstance
   function.

Then (for each interface) either

Multiple inheritance

1. Also derive it from ISomeInterface
2. Include DECLARE_IUNKNOWN in your class definition to declare
   implementations of QueryInterface, AddRef and Release that
   call the outer unknown
3. Override NonDelegatingQueryInterface to expose ISomeInterface by
   code something like

     if (riid == IID_ISomeInterface) {
         return GetInterface((ISomeInterface *) this, ppv);
     } else {
         return CUnknown::NonDelegatingQueryInterface(riid, ppv);
     }

4. Declare and implement the member functions of ISomeInterface.

or: Nested interfaces

1. Declare a class derived from CUnknown
2. Include DECLARE_IUNKNOWN in your class definition
3. Override NonDelegatingQueryInterface to expose ISomeInterface by
   code something like

     if (riid == IID_ISomeInterface) {
         return GetInterface((ISomeInterface *) this, ppv);
     } else {
         return CUnknown::NonDelegatingQueryInterface(riid, ppv);
     }

4. Implement the member functions of ISomeInterface. Use GetOwner() to
   access the COM object class.

And in your COM object class:

5. Make the nested class a friend of the COM object class, and declare
   an instance of the nested class as a member of the COM object class.

   NOTE that because you must always pass the outer unknown and an hResult
   to the CUnknown constructor you cannot use a default constructor, in
   other words you will have to make the member variable a pointer to the
   class and make a NEW call in your constructor to actually create it.

6. override the NonDelegatingQueryInterface with code like this:

     if (riid == IID_ISomeInterface) {
         return m_pImplFilter->
            NonDelegatingQueryInterface(IID_ISomeInterface, ppv);
     } else {
         return CUnknown::NonDelegatingQueryInterface(riid, ppv);
     }

You can have mixed classes which support some interfaces via multiple
inheritance and some via nested classes

*/

#ifndef __COMBASE__
#define __COMBASE__

// Filter Setup data structures no defined in axextend.idl

typedef REGPINTYPES
AMOVIESETUP_MEDIATYPE, * PAMOVIESETUP_MEDIATYPE, * FAR LPAMOVIESETUP_MEDIATYPE;

typedef REGFILTERPINS
AMOVIESETUP_PIN, * PAMOVIESETUP_PIN, * FAR LPAMOVIESETUP_PIN;

typedef struct _AMOVIESETUP_FILTER
{
  const CLSID * clsID;
  const WCHAR * strName;
  DWORD      dwMerit;
  UINT       nPins;
  const AMOVIESETUP_PIN * lpPin;
}
AMOVIESETUP_FILTER, * PAMOVIESETUP_FILTER, * FAR LPAMOVIESETUP_FILTER;

/* The DLLENTRY module initialises the module handle on loading */

extern HINSTANCE g_hInst;

/* On DLL load remember which platform we are running on */

extern DWORD g_amPlatform;
extern OSVERSIONINFO g_osInfo;     // Filled in by GetVersionEx

/* Version of IUnknown that is renamed to allow a class to support both
   non delegating and delegating IUnknowns in the same COM object */

#ifndef INONDELEGATINGUNKNOWN_DEFINED
DECLARE_INTERFACE(INonDelegatingUnknown)
{
    STDMETHOD(NonDelegatingQueryInterface) (THIS_ REFIID, LPVOID *) PURE;
    STDMETHOD_(ULONG, NonDelegatingAddRef)(THIS) PURE;
    STDMETHOD_(ULONG, NonDelegatingRelease)(THIS) PURE;
};
#define INONDELEGATINGUNKNOWN_DEFINED
#endif

typedef INonDelegatingUnknown *PNDUNKNOWN;


/* This is the base object class that supports active object counting. As
   part of the debug facilities we trace every time a C++ object is created
   or destroyed. The name of the object has to be passed up through the class
   derivation list during construction as you cannot call virtual functions
   in the constructor. The downside of all this is that every single object
   constructor has to take an object name parameter that describes it */

class CBaseObject
{

private:

    // Disable the copy constructor and assignment by default so you will get
    //   compiler errors instead of unexpected behaviour if you pass objects
    //   by value or assign objects.
    CBaseObject(const CBaseObject& objectSrc);          // no implementation
    void operator=(const CBaseObject& objectSrc);       // no implementation

private:
    static LONG m_cObjects;     /* Total number of objects active */

protected:
#ifdef DEBUG
    DWORD m_dwCookie;           /* Cookie identifying this object */
#endif


public:

    /* These increment and decrement the number of active objects */

    CBaseObject(const TCHAR *pName);
#ifdef UNICODE
    CBaseObject(const char *pName);
#endif
    ~CBaseObject();

    /* Call this to find if there are any CUnknown derived objects active */

    static LONG ObjectsActive() {
        return m_cObjects;
    };
};


/* An object that supports one or more COM interfaces will be based on
   this class. It supports counting of total objects for DLLCanUnloadNow
   support, and an implementation of the core non delegating IUnknown */

class AM_NOVTABLE CUnknown : public INonDelegatingUnknown,
                 public CBaseObject
{
private:
    const LPUNKNOWN m_pUnknown; /* Owner of this object */

protected:                      /* So we can override NonDelegatingRelease() */
    volatile LONG m_cRef;       /* Number of reference counts */

public:

    CUnknown(const TCHAR *pName, LPUNKNOWN pUnk);
    virtual ~CUnknown() {};

    // This is redundant, just use the other constructor
    //   as we never touch the HRESULT in this anyway
    CUnknown(TCHAR *pName, LPUNKNOWN pUnk,HRESULT *phr);
#ifdef UNICODE
    CUnknown(const char *pName, LPUNKNOWN pUnk);
    CUnknown(char *pName, LPUNKNOWN pUnk,HRESULT *phr);
#endif

    /* Return the owner of this object */

    LPUNKNOWN GetOwner() const {
        return m_pUnknown;
    };

    /* Called from the class factory to create a new instance, it is
       pure virtual so it must be overriden in your derived class */

    /* static CUnknown *CreateInstance(LPUNKNOWN, HRESULT *) */

    /* Non delegating unknown implementation */

    STDMETHODIMP NonDelegatingQueryInterface(REFIID, void **);
    STDMETHODIMP_(ULONG) NonDelegatingAddRef();
    STDMETHODIMP_(ULONG) NonDelegatingRelease();
};

#if (_MSC_VER <= 1200)
#pragma warning(disable:4211)

/* The standard InterlockedXXX functions won't take volatiles */
static inline LONG WINAPI InterlockedIncrement( volatile LONG * plong )
{ return InterlockedIncrement( const_cast<LONG*>( plong ) ); }

static inline LONG WINAPI InterlockedDecrement( volatile LONG * plong )
{ return InterlockedDecrement( const_cast<LONG*>( plong ) ); }

#pragma warning(default:4211)
#endif


/* Return an interface pointer to a requesting client
   performing a thread safe AddRef as necessary */

STDAPI GetInterface(LPUNKNOWN pUnk, void **ppv);

/* A function that can create a new COM object */

typedef CUnknown *(CALLBACK *LPFNNewCOMObject)(LPUNKNOWN pUnkOuter, HRESULT *phr);

/*  A function (can be NULL) which is called from the DLL entrypoint
    routine for each factory template:

    bLoading - TRUE on DLL load, FALSE on DLL unload
    rclsid   - the m_ClsID of the entry
*/
typedef void (CALLBACK *LPFNInitRoutine)(BOOL bLoading, const CLSID *rclsid);

/* Create one of these per object class in an array so that
   the default class factory code can create new instances */

class CFactoryTemplate {

public:

    const WCHAR *              m_Name;
    const CLSID *              m_ClsID;
    LPFNNewCOMObject           m_lpfnNew;
    LPFNInitRoutine            m_lpfnInit;
    const AMOVIESETUP_FILTER * m_pAMovieSetup_Filter;

    BOOL IsClassID(REFCLSID rclsid) const {
        return (IsEqualCLSID(*m_ClsID,rclsid));
    };

    CUnknown *CreateInstance(LPUNKNOWN pUnk, HRESULT *phr) const {
        CheckPointer(phr,NULL);
        return m_lpfnNew(pUnk, phr);
    };
};


/* You must override the (pure virtual) NonDelegatingQueryInterface to return
   interface pointers (using GetInterface) to the interfaces your derived
   class supports (the default implementation only supports IUnknown) */

#define DECLARE_IUNKNOWN                                        \
    STDMETHODIMP QueryInterface(REFIID riid, void **ppv) {      \
        return GetOwner()->QueryInterface(riid,ppv);            \
    };                                                          \
    STDMETHODIMP_(ULONG) AddRef() {                             \
        return GetOwner()->AddRef();                            \
    };                                                          \
    STDMETHODIMP_(ULONG) Release() {                            \
        return GetOwner()->Release();                           \
    };



HINSTANCE	LoadOLEAut32();


#endif /* __COMBASE__ */




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产一区二区三区青草影视| 91精品国产综合久久精品app| 99re这里都是精品| 欧美日本一区二区| 国产午夜精品福利| 五月天婷婷综合| 成人国产电影网| 欧美α欧美αv大片| 亚洲精品高清视频在线观看| 狠狠狠色丁香婷婷综合激情| 在线观看亚洲专区| 国产欧美日韩另类一区| 日本中文字幕不卡| 在线观看欧美日本| 国产精品欧美经典| 国产一区二区不卡老阿姨| 欧美日韩一区在线观看| 亚洲男人的天堂网| 成人免费看片app下载| 2023国产精品| 日本欧美一区二区| 欧美精品色一区二区三区| 亚洲丝袜自拍清纯另类| 国产99一区视频免费| 亚洲精品一区二区三区香蕉| 亚洲chinese男男1069| 色天天综合久久久久综合片| 国产精品美女久久福利网站| 国产精品中文有码| 久久一留热品黄| 麻豆久久久久久久| 欧美刺激脚交jootjob| 免费成人美女在线观看.| 91精品一区二区三区久久久久久| 亚洲一区二区精品视频| 在线国产电影不卡| 亚洲综合精品久久| 欧美视频完全免费看| 亚洲综合色成人| 欧美色倩网站大全免费| 亚洲成人免费在线| 制服丝袜中文字幕一区| 蜜臀精品一区二区三区在线观看| 日韩一区二区三区精品视频| 日韩中文字幕一区二区三区| 7777精品久久久大香线蕉 | 国产v日产∨综合v精品视频| 欧美精品一区二区久久久| 国产一区二区精品久久| 国产欧美精品一区| 99久久国产综合精品女不卡| 国产精品美女久久久久久久| 99久免费精品视频在线观看| 亚洲乱码国产乱码精品精98午夜| 91免费视频观看| 亚洲一区二区五区| 日韩午夜在线播放| 成人深夜福利app| 亚洲综合免费观看高清在线观看| 在线播放/欧美激情| 久久av资源站| 中文字幕制服丝袜一区二区三区| 91成人看片片| 久久国产精品第一页| 国产欧美一区二区三区在线老狼 | 欧美电视剧在线看免费| 国产一区91精品张津瑜| 亚洲少妇最新在线视频| 欧美精品xxxxbbbb| 国产夫妻精品视频| 亚洲影视资源网| 日韩欧美电影一区| 91亚洲国产成人精品一区二区三 | 欧美日韩精品二区第二页| 另类调教123区| 中文字幕亚洲综合久久菠萝蜜| 欧美日韩另类国产亚洲欧美一级| 韩国成人精品a∨在线观看| 亚洲欧美一区二区三区孕妇| 欧美一区二区成人6969| 国产午夜精品一区二区三区嫩草 | 91在线国内视频| 日本不卡高清视频| 中文字幕中文在线不卡住| 欧美日韩一区不卡| 成人av网站在线观看免费| 日本中文一区二区三区| 亚洲欧美偷拍另类a∨色屁股| 日韩一区二区麻豆国产| 在线观看日韩高清av| 国产一区二区不卡| 日本三级韩国三级欧美三级| 亚洲人妖av一区二区| 精品国产一区二区三区忘忧草 | 欧美亚一区二区| 粉嫩久久99精品久久久久久夜| 天堂在线一区二区| 亚洲人成在线播放网站岛国 | 亚洲视频免费观看| 成人的网站免费观看| 国产一区高清在线| 中文字幕一区日韩精品欧美| 色94色欧美sute亚洲13| 亚洲妇女屁股眼交7| 欧美电影免费观看高清完整版| 久久精品999| 中文字幕在线不卡一区二区三区 | 久久精品夜色噜噜亚洲aⅴ| 99久久99久久精品免费观看| 国产精品久久久久久久久久久免费看| 欧美私人免费视频| 97aⅴ精品视频一二三区| 国产成人精品免费| 国产麻豆精品视频| 韩国精品主播一区二区在线观看 | 欧美一区二区三区视频在线| 日本久久电影网| 色999日韩国产欧美一区二区| www.成人在线| 91在线无精精品入口| 成人看片黄a免费看在线| 国产成人在线免费观看| 国产成a人亚洲精| 成人综合激情网| www.av亚洲| 色视频欧美一区二区三区| 91色在线porny| 在线视频欧美精品| 欧美另类videos死尸| 91精品国产一区二区三区蜜臀 | 日韩欧美电影一二三| 日韩视频一区二区三区在线播放| 337p亚洲精品色噜噜| 日韩精品一区二| 国产欧美一区二区精品性| 国产日韩欧美在线一区| 国产精品二三区| 亚洲自拍都市欧美小说| 日韩va亚洲va欧美va久久| 精品一区二区三区在线播放视频| 国产精品一区二区你懂的| 99久久精品免费精品国产| 91成人在线免费观看| 日韩一区二区在线看片| 国产午夜精品在线观看| 国产精品电影一区二区三区| 亚洲国产日韩综合久久精品| 男人操女人的视频在线观看欧美| 国产乱码精品1区2区3区| 成人av免费在线观看| 欧美视频在线一区| 欧美videossexotv100| 国产精品欧美一区喷水| 亚洲国产精品影院| 国产精品18久久久久久久久久久久| 99视频国产精品| 91精品国产综合久久小美女| 国产欧美日韩综合| 亚洲国产精品久久久男人的天堂| 蜜桃视频一区二区三区 | 久久99国内精品| 91玉足脚交白嫩脚丫在线播放| 欧美日本视频在线| 国产精品久久久久影院| 全国精品久久少妇| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产成人精品三级麻豆| 欧美在线免费观看亚洲| 久久久久久久电影| 亚洲视频你懂的| 激情另类小说区图片区视频区| 在线一区二区三区四区五区| 精品女同一区二区| 亚洲一二三区不卡| 丁香婷婷深情五月亚洲| 日韩片之四级片| 亚洲国产综合色| 99久久精品免费观看| 久久午夜老司机| 日本亚洲电影天堂| 欧美在线色视频| 亚洲欧美偷拍三级| 懂色av一区二区三区免费看| 日韩精品一区二区三区视频| 亚洲高清视频在线| 91麻豆自制传媒国产之光| 久久亚洲一级片| 蜜桃免费网站一区二区三区| 欧美性受xxxx黑人xyx性爽| 亚洲视频图片小说| 成人一级片在线观看| 久久久精品蜜桃| 激情综合色综合久久综合| 欧美一区二区三区免费| 五月天婷婷综合| 欧美精品一二三四| 日韩精品一区第一页| 欧美片网站yy| 午夜精品福利视频网站| 欧美色图12p|