1 module aurora.directx.com; 2 3 public import core.sys.windows.windows; 4 public import core.sys.windows.com; 5 6 import core.atomic; 7 8 public: 9 10 mixin(uuid!(IUnknown, "00000000-0000-0000-C000-000000000046")); 11 mixin(uuid!(IClassFactory,"00000001-0000-0000-C000-000000000046")); 12 13 public struct LUID { 14 uint LowPart; 15 int HighPart; 16 } 17 18 struct GUID { 19 ulong Data1; 20 ushort Data2; 21 ushort Data3; 22 ubyte[8] Data4; 23 } 24 alias GUID UUID; 25 26 public struct SIZE { 27 long X; 28 long Y; 29 } 30 31 struct FILETIME { 32 uint dwLowDateTime; 33 uint dwHighDateTime; 34 } 35 36 struct FONTSIGNATURE 37 { 38 int[4] fsUsb; 39 int[2] fsCsb; 40 } 41 42 public template uuid(T, const char[] g) { 43 const char [] uuid = 44 "const IID IID_" ~ T.stringof ~ "={ 0x" ~ g[0..8] ~ ",0x" ~ g[9..13] ~ ",0x" ~ g[14..18] ~ ",[0x" ~ g[19..21] ~ ",0x" ~ g[21..23] ~ ",0x" ~ g[24..26] ~ ",0x" ~ g[26..28] ~ ",0x" ~ g[28..30] ~ ",0x" ~ g[30..32] ~ ",0x" ~ g[32..34] ~ ",0x" ~ g[34..36] ~ "]};" ~ 45 "template uuidof(T:" ~ T.stringof ~ "){" ~ 46 " const IID uuidof ={ 0x" ~ g[0..8] ~ ",0x" ~ g[9..13] ~ ",0x" ~ g[14..18] ~ ",[0x" ~ g[19..21] ~ ",0x" ~ g[21..23] ~ ",0x" ~ g[24..26] ~ ",0x" ~ g[26..28] ~ ",0x" ~ g[28..30] ~ ",0x" ~ g[30..32] ~ ",0x" ~ g[32..34] ~ ",0x" ~ g[34..36] ~ "]};"~ 47 "}"; 48 } 49 50 public struct STATSTG { 51 LPOLESTR pwcsName; 52 DWORD type; 53 ULARGE_INTEGER cbSize; 54 FILETIME mtime; 55 FILETIME ctime; 56 FILETIME atime; 57 DWORD grfMode; 58 DWORD grfLocksSupported; 59 CLSID clsid; 60 DWORD grfStateBits; 61 DWORD reserved; 62 } 63 64 public class DXPtr(T : IUnknown) 65 { 66 private T _value = null; 67 68 public @property T value() { return _value; } 69 alias value this; 70 71 public this(T value) { 72 _value = value; 73 } 74 75 public void opAssign(T value) { 76 if(_value !is null) { 77 _value.Release(); 78 _value = value; 79 } else { 80 _value = value; 81 } 82 } 83 84 public ~this() { 85 if(_value !is null) { 86 _value.Release(); 87 _value = null; 88 } 89 } 90 } 91 92 mixin(uuid!(ISequentialStream, "0C733A30-2A1C-11CE-ADE5-00AA0044773D")); 93 public interface ISequentialStream : IUnknown 94 { 95 extern(Windows): 96 HRESULT Read(void *pv, ULONG cb, ULONG *pcbRead); 97 HRESULT Write(const void *pv, ULONG cb, ULONG *pcbWritten); 98 } 99 100 mixin(uuid!(IStream, "0C733A30-2A1C-11CE-ADE5-00AA0044773D")); 101 public interface IStream : ISequentialStream 102 { 103 extern(Windows): 104 HRESULT Clone(IStream *ppstm); 105 HRESULT Commit(uint grfCommitFlags); 106 HRESULT CopyTo(IStream pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten); 107 HRESULT LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, uint dwLockType); 108 HRESULT Revert(); 109 HRESULT Seek(LARGE_INTEGER dlibMove, uint dwOrigin, ULARGE_INTEGER *plibNewPosition); 110 HRESULT SetSize(ULARGE_INTEGER libNewSize); 111 HRESULT Stat(STATSTG *pstatstg, uint grfStatFlag); 112 HRESULT UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, uint dwLockType); 113 } 114 115 mixin(uuid!(IPrintDocumentPackageTarget, "1b8efec4-3019-4c27-964e-367202156906")); 116 public interface IPrintDocumentPackageTarget : IUnknown 117 { 118 extern(Windows): 119 HRESULT Cancel(); 120 HRESULT GetPackageTarget(GUID* guidTargetType, IID* riid, void **ppvTarget); 121 HRESULT GetPackageTargetTypes(uint *targetCount, GUID **targetTypes); 122 } 123 124 mixin(uuid!(IEnumUnknown, "00000100-0000-0000-C000-000000000046")); 125 public interface IEnumUnknown : IUnknown 126 { 127 extern(Windows): 128 HRESULT Clone(IEnumUnknown **ppenum); 129 HRESULT Next(ulong celt, IUnknown **rgelt, ulong *pceltFetched); 130 HRESULT Reset(); 131 HRESULT Skip(ulong celt); 132 } 133 134 mixin(uuid!(IEnumString, "00000101-0000-0000-C000-000000000046")); 135 public interface IEnumString : IUnknown 136 { 137 extern(Windows): 138 HRESULT Clone(IEnumString **ppenum); 139 HRESULT Next(ulong celt, LPOLESTR *rgelt, ulong *pceltFetched); 140 HRESULT Reset(); 141 HRESULT Skip(ulong celt); 142 }