1 USING: alien alien.c-types alien.destructors windows.com.syntax
2 windows.ole32 windows.types continuations kernel alien.syntax
3 libc destructors accessors alien.data classes.struct windows.kernel32 ;
8 COM-INTERFACE: IUnknown f {00000000-0000-0000-C000-000000000046}
9 HRESULT QueryInterface ( REFGUID iid, void** ppvObject )
17 COM-INTERFACE: IEnumFORMATETC IUnknown {00000103-0000-0000-C000-000000000046}
18 HRESULT Clone ( IEnumFORMATETC **ppenum )
19 HRESULT Next ( ULONG celt, FORMATETC *rgelt, ULONG* pceltFetched )
21 HRESULT Skip ( ULONG celt ) ;
23 COM-INTERFACE: IDataObject IUnknown {0000010E-0000-0000-C000-000000000046}
24 HRESULT GetData ( FORMATETC* pFormatetc, STGMEDIUM* pmedium )
25 HRESULT GetDataHere ( FORMATETC* pFormatetc, STGMEDIUM* pmedium )
26 HRESULT QueryGetData ( FORMATETC* pFormatetc )
27 HRESULT GetCanonicalFormatEtc ( FORMATETC* pFormatetcIn, FORMATETC* pFormatetcOut )
28 HRESULT SetData ( FORMATETC* pFormatetc, STGMEDIUM* pmedium, BOOL fRelease )
29 HRESULT EnumFormatEtc ( DWORD dwDirection, IEnumFORMATETC** ppenumFormatetc )
30 HRESULT DAdvise ( FORMATETC* pFormatetc, DWORD advf, IAdviseSink* pAdvSink, DWORD* pdwConnection )
31 HRESULT DUnadvise ( DWORD pdwConnection )
32 HRESULT EnumDAdvise ( IEnumSTATDATA** ppenumAdvise ) ;
34 COM-INTERFACE: IDropSource IUnknown {00000121-0000-0000-C000-000000000046}
35 HRESULT GiveFeedback ( DWORD dwEffect )
36 HRESULT QueryContinueDrag ( BOOL fEscapePressed, DWORD grfKeyState ) ;
38 COM-INTERFACE: IDropTarget IUnknown {00000122-0000-0000-C000-000000000046}
39 HRESULT DragEnter ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect )
40 HRESULT DragOver ( DWORD grfKeyState, POINTL pt, DWORD* pdwEffect )
42 HRESULT Drop ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) ;
44 TYPEDEF: LPWSTR LPCOLESTR
45 TYPEDEF: LPWSTR OLESTR
47 TYPEDEF: wchar_t* OLECHAR
53 { cbSize ULARGE_INTEGER }
58 { grfLocksSupported DWORD }
60 { grfStateBits DWORD }
63 COM-INTERFACE: IStorage IUnknown {0000000B-0000-0000-C000-000000000046}
64 HRESULT Commit ( DWORD grfCommitFlags )
65 HRESULT CopyTo ( DWORD ciidExclude, IID *rgiidExclude, SNB snbExclude, IStorage *pstgDest )
66 HRESULT CreateStorage ( OLECHAR *pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStorage **ppstg )
67 HRESULT CreateStream ( OLECHAR *pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream **ppstm )
68 HRESULT DestroyElement ( OLECHAR *pwcsName )
69 HRESULT EnumElements ( DWORD reserved1, void *reserved2, DWORD reserved3, IEnumSTATSTG **ppenum )
70 HRESULT MoveElementTo ( OLECHAR *pwcsName, IStorage *pstgDest, OLECHAR *pwcsNewName, DWORD grfFlags )
71 HRESULT OpenStorage ( OLECHAR *pwcsName, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstg )
72 HRESULT OpenStream ( OLECHAR *pwcsName, void *reserved1, DWORD grfMode, DWORD reserved2, IStream **ppstm )
73 HRESULT RenameElement ( OLECHAR *pwcsOldName, OLECHAR *pwcsNewName )
75 HRESULT SetClass ( REFCLSID clsid )
76 HRESULT SetElementTimes ( OLECHAR *pwcsName, FILETIME *pctime, FILETIME *patime, FILETIME *pmtime )
77 HRESULT SetStateBits ( DWORD grfStateBits, DWORD grfMask )
78 HRESULT Stat ( STATSTG *pstatstg, DWORD grfStatFlag ) ;
80 TYPEDEF: IDataObject* LPDATAOBJECT
81 TYPEDEF: IDropSource* LPDROPSOURCE
83 FUNCTION: HRESULT DoDragDrop (
84 LPDATAOBJECT pDataObj,
85 LPDROPSOURCE pDropSource,
90 COM-INTERFACE: ISequentialStream IUnknown {0C733A30-2A1C-11CE-ADE5-00AA0044773D}
91 HRESULT Read ( void* pv, ULONG cb, ULONG* pcbRead )
92 HRESULT Write ( void* pv, ULONG cb, ULONG* pcbWritten ) ;
96 CONSTANT: STGM_WRITE 1
97 CONSTANT: STGM_READWRITE 2
99 CONSTANT: STG_E_INVALIDFUNCTION 0x80030001
101 CONSTANT: STGTY_STORAGE 1
102 CONSTANT: STGTY_STREAM 2
103 CONSTANT: STGTY_LOCKBYTES 3
104 CONSTANT: STGTY_PROPERTY 4
106 CONSTANT: STREAM_SEEK_SET 0
107 CONSTANT: STREAM_SEEK_CUR 1
108 CONSTANT: STREAM_SEEK_END 2
110 CONSTANT: LOCK_WRITE 1
111 CONSTANT: LOCK_EXCLUSIVE 2
112 CONSTANT: LOCK_ONLYONCE 4
114 CONSTANT: GUID_NULL GUID: {00000000-0000-0000-0000-000000000000}
116 COM-INTERFACE: IStream ISequentialStream {0000000C-0000-0000-C000-000000000046}
117 HRESULT Seek ( LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition )
118 HRESULT SetSize ( ULARGE_INTEGER* libNewSize )
119 HRESULT CopyTo ( IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten )
120 HRESULT Commit ( DWORD grfCommitFlags )
122 HRESULT LockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
123 HRESULT UnlockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
124 HRESULT Stat ( STATSTG* pstatstg, DWORD grfStatFlag )
125 HRESULT Clone ( IStream** ppstm ) ;
127 FUNCTION: HRESULT RegisterDragDrop ( HWND hWnd, IDropTarget* pDropTarget )
128 FUNCTION: HRESULT RevokeDragDrop ( HWND hWnd )
129 FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium )
131 : com-query-interface ( interface iid -- interface' )
133 [ IUnknown::QueryInterface check-ole32-error ]
134 with-out-parameters ;
136 : com-add-ref ( interface -- interface )
137 [ IUnknown::AddRef drop ] keep ; inline
139 ERROR: null-com-release ;
140 : com-release ( interface -- )
141 [ IUnknown::Release drop ] [ null-com-release ] if* ; inline
143 : with-com-interface ( interface quot -- )
144 over [ com-release ] curry finally ; inline
146 DESTRUCTOR: com-release