SOL9 2.0 Class: ComIUnknown

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * ComIUnknown.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


//2009/12/04
//2010/04/01

#pragma once

#include <sol/Object.h>
#include <objbase.h>

#include <sol/COMTypeConverter.h>

//2010/04/01
#include <sol/BString.h>

#pragma comment(lib, "oleaut32.lib")


namespace SOL {

class ComIUnknown :public Object {

private:
    IUnknown* pUnknown;

public:
    ComIUnknown(IUnknown* pUnk=NULL)
    :pUnknown(pUnk)
    {

    }

public:
    ~ComIUnknown() 
    {
        clear();
    }


public:
    ULONG addRef()
    {
        ULONG ref = 0;
        if (pUnknown) {
            ref = pUnknown->AddRef();
        }
        return ref;
    }

public:
    ULONG release()
    {
        ULONG ref = 0;
        if (pUnknown) {
            ref =pUnknown->Release();
        }
        return ref;
    }

public:
    void clear()
    {
        if (pUnknown) {
            pUnknown->Release();
            pUnknown = NULL;
        }
    }

public:
    HRESULT queryInterface(REFIID riid, void **ppvObject)
    {
        IUnknown* pUnk = getIUnknown();

        return pUnk->QueryInterface(riid, ppvObject);
    }

public:
    IDispatch* queryInterface(REFIID riid)
    {
        IUnknown* pUnk = getIUnknown();

        HRESULT hr = E_FAIL;
        IDispatch* pObject = NULL;

        if (FAILED(hr  = pUnk->QueryInterface(riid, (void**)&pObject))) {
            throw hr;
        }
        return pObject;
    }

public:
    virtual void display()
    {
        printf("ComIUnknown::display\n");
    }


public:
    void set(IUnknown* pUnk)
    {
        pUnknown = pUnk;
    }

public:
    IUnknown* getIUnknown()
    {
        if (pUnknown == NULL) {
            throw E_POINTER;
        } else {
            return pUnknown;
        }
    }

public:
    operator IUnknown*() {
        return getIUnknown();
    }

public:
    //2009/12/21
    bool toBool(VARIANT_BOOL varBool)
    {
        bool rc = false;
        if (varBool == VARIANT_TRUE) {
            rc = true;
        }
        return rc;
    }

public:
    //2009/12/21
    VARIANT_BOOL toVariantBool(bool bBool)
    {
        VARIANT_BOOL rc = VARIANT_FALSE;
        if (bBool == true) {
            rc = VARIANT_TRUE;
        }
        return rc;
    }

};

}

Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.