/*
* 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;
}
};
}
|