Wolfgang Thallergcc 15.1.0ada185d1 year agoHistory
104 lines · 2.7 KB · D
RawDownload
module core.sys.windows.com;version (Windows): pragma(lib,"uuid"); import core.atomic;import core.sys.windows.windef /+: HRESULT, LONG, ULONG+/;//import std.string; public import core.sys.windows.basetyps : GUID, IID, CLSID; public import core.sys.windows.objbase :    CLSCTX_INPROC, CLSCTX_ALL, CLSCTX_SERVER,    COINIT,    CoBuildVersion, StringFromGUID2,    CoInitialize, CoInitializeEx, CoUninitialize, CoGetCurrentProcess,    CoCreateInstance,    CoFreeLibrary, CoFreeAllLibraries, CoFreeUnusedLibraries; public import core.sys.windows.ole2ver : rmm, rup; public import core.sys.windows.unknwn : IUnknown, IClassFactory; public import core.sys.windows.winerror :    S_OK,    S_FALSE,    NOERROR,    E_NOTIMPL,    E_NOINTERFACE,    E_POINTER,    E_ABORT,    E_FAIL,    E_HANDLE,    CLASS_E_NOAGGREGATION,    E_OUTOFMEMORY,    E_INVALIDARG,    E_UNEXPECTED,    RPC_E_CHANGED_MODE; public import core.sys.windows.wtypes :    CLSCTX, OLECHAR, LPOLESTR, LPCOLESTR; alias CLSCTX_INPROC_SERVER     = CLSCTX.CLSCTX_INPROC_SERVER    ;alias CLSCTX_INPROC_HANDLER    = CLSCTX.CLSCTX_INPROC_HANDLER   ;alias CLSCTX_LOCAL_SERVER      = CLSCTX.CLSCTX_LOCAL_SERVER     ;alias CLSCTX_INPROC_SERVER16   = CLSCTX.CLSCTX_INPROC_SERVER16  ;alias CLSCTX_REMOTE_SERVER     = CLSCTX.CLSCTX_REMOTE_SERVER    ;alias CLSCTX_INPROC_HANDLER16  = CLSCTX.CLSCTX_INPROC_HANDLER16 ;alias CLSCTX_INPROC_SERVERX86  = CLSCTX.CLSCTX_INPROC_SERVERX86 ;alias CLSCTX_INPROC_HANDLERX86 = CLSCTX.CLSCTX_INPROC_HANDLERX86; alias COINIT_APARTMENTTHREADED   = COINIT.COINIT_APARTMENTTHREADED;alias COINIT_MULTITHREADED       = COINIT.COINIT_MULTITHREADED    ;alias COINIT_DISABLE_OLE1DDE     = COINIT.COINIT_DISABLE_OLE1DDE  ;alias COINIT_SPEED_OVER_MEMORY   = COINIT.COINIT_SPEED_OVER_MEMORY; public import core.sys.windows.uuid; extern (Windows){ class ComObject : IUnknown{extern (Windows):    HRESULT QueryInterface(const(IID)* riid, void** ppv)    {        if (*riid == IID_IUnknown)        {            *ppv = cast(void*)cast(IUnknown)this;            AddRef();            return S_OK;        }        else        {   *ppv = null;            return E_NOINTERFACE;        }    }     ULONG AddRef()    {        return atomicOp!"+="(*cast(shared)&count, 1);    }     ULONG Release()    {        LONG lRef = atomicOp!"-="(*cast(shared)&count, 1);        if (lRef == 0)        {            // free object             // If we delete this object, then the postinvariant called upon            // return from Release() will fail.            // Just let the GC reap it.            //delete this;             return 0;        }        return cast(ULONG)lRef;    }     LONG count = 0;             // object reference count} }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t