1360232 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

さすらいのプログラマ

さすらいのプログラマ

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Keyword Search

▼キーワード検索

Profile

xyzzy_user

xyzzy_user

Calendar

Comments

CarmineFub@ agorb lup <a href="https://sosamba-spb1.r…
AllenRaf@ fig Dib <a href="https://privatespb.com…
Rolandodeamp@ surry alubs <a href="https://blyadsk.ru/&qu…
Victornuple@ wic Exhax <a href="https://sosamba196.ru/…
avenue17@ Sains Sig круть...инетересно было прочесть

Freepage List

2007/05/08
XML
カテゴリ:C言語(Win32)
IClassFactoryの実装部分です。
static ULONG __stdcall CF_AddRef(IClassFactory *this) {
    InterlockedIncrement(&g_dwObjectCount);

    return(1);
}

static HRESULT __stdcall CF_QueryInterface(IClassFactory *this, REFIID riid, void **ppv) {
    if (IsEqualIID(riid, &IID_IUnknown) ||
            IsEqualIID(riid, &IID_IClassFactory)) {
        this->lpVtbl->AddRef(this);

        *ppv = this;

        return(NOERROR);
    }

    *ppv = NULL;
    return(E_NOINTERFACE);
}

static ULONG __stdcall CF_Release(IClassFactory *this) {
    return(InterlockedDecrement(&g_dwObjectCount));
}

static HRESULT __stdcall CF_CreateInstance(IClassFactory *this, IUnknown *punkOuter, REFIID riid, void **ppv) {
    HRESULT hr;
    register IStep1 *thisObj;

    *ppv = NULL;

    if (punkOuter)
        hr = CLASS_E_NOAGGREGATION;
    else {
        if(thisObj = (IStep1 *)GlobalAlloc(GMEM_FIXED, sizeof(CStep1))) {
            thisObj->lpVtbl = &IStep1_Vtbl;
            ((CStep1 *)thisObj)->dwRefCount = 1;
            ((CStep1 *)thisObj)->szString[0] = 0;
            hr = thisObj->lpVtbl->QueryInterface(thisObj, riid, ppv);
            thisObj->lpVtbl->Release(thisObj);
            if (!hr) InterlockedIncrement(&g_dwObjectCount);
        }
        else {
            hr = E_OUTOFMEMORY;
        }
    }

    return(hr);
}

static HRESULT __stdcall CF_LockServer(IClassFactory *this,
         BOOL flock) {
    if (flock) InterlockedIncrement(&g_dwLockCount);
    else InterlockedDecrement(&g_dwLockCount);

    return(NOERROR);
}

あとは、・・・・(続く)





お気に入りの記事を「いいね!」で応援しよう

Last updated  2007/05/08 09:11:52 AM
コメント(0) | コメントを書く
[C言語(Win32)] カテゴリの最新記事



© Rakuten Group, Inc.
X