// Written in the D programming language. /** * Support COM on Windows systems. * * Copyright: Copyright Digital Mars 2000 - 2009. * License: Boost License 1.0. * Authors: $(WEB digitalmars.com, Walter Bright) * * Copyright Digital Mars 2000 - 2009. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) */ module std.windows.iunknown; private import std.c.windows.windows; pragma(lib, "uuid.lib"); alias int HRESULT; enum : int { S_OK = 0, E_NOINTERFACE = cast(int)0x80004002, } struct GUID { // size is 16 align(1): DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[8]; } alias GUID IID; extern (C) { extern IID IID_IUnknown; } class IUnknown { HRESULT QueryInterface(IID* riid, out IUnknown pvObject) { if (riid == &IID_IUnknown) { pvObject = this; AddRef(); return S_OK; } else { pvObject = null; return E_NOINTERFACE; } } ULONG AddRef() { return ++count; } ULONG Release() { if (--count == 0) { // free object return 0; } return count; } int count = 1; }