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 )
14 C-TYPE: IEnumFORMATETC
17 COM-INTERFACE: IDataObject IUnknown {0000010E-0000-0000-C000-000000000046}
18 HRESULT GetData ( FORMATETC* pFormatetc, STGMEDIUM* pmedium )
19 HRESULT GetDataHere ( FORMATETC* pFormatetc, STGMEDIUM* pmedium )
20 HRESULT QueryGetData ( FORMATETC* pFormatetc )
21 HRESULT GetCanonicalFormatEtc ( FORMATETC* pFormatetcIn, FORMATETC* pFormatetcOut )
22 HRESULT SetData ( FORMATETC* pFormatetc, STGMEDIUM* pmedium, BOOL fRelease )
23 HRESULT EnumFormatEtc ( DWORD dwDirection, IEnumFORMATETC** ppenumFormatetc )
24 HRESULT DAdvise ( FORMATETC* pFormatetc, DWORD advf, IAdviseSink* pAdvSink, DWORD* pdwConnection )
25 HRESULT DUnadvise ( DWORD pdwConnection )
26 HRESULT EnumDAdvise ( IEnumSTATDATA** ppenumAdvise ) ;
28 COM-INTERFACE: IDropTarget IUnknown {00000122-0000-0000-C000-000000000046}
29 HRESULT DragEnter ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect )
30 HRESULT DragOver ( DWORD grfKeyState, POINTL pt, DWORD* pdwEffect )
32 HRESULT Drop ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) ;
34 COM-INTERFACE: ISequentialStream IUnknown {0C733A30-2A1C-11CE-ADE5-00AA0044773D}
35 HRESULT Read ( void* pv, ULONG cb, ULONG* pcbRead )
36 HRESULT Write ( void* pv, ULONG cb, ULONG* pcbWritten ) ;
41 { cbSize ULARGE_INTEGER }
46 { grfLocksSupported DWORD }
48 { grfStateBits DWORD }
52 CONSTANT: STGM_WRITE 1
53 CONSTANT: STGM_READWRITE 2
55 CONSTANT: STG_E_INVALIDFUNCTION 0x80030001
57 CONSTANT: STGTY_STORAGE 1
58 CONSTANT: STGTY_STREAM 2
59 CONSTANT: STGTY_LOCKBYTES 3
60 CONSTANT: STGTY_PROPERTY 4
62 CONSTANT: STREAM_SEEK_SET 0
63 CONSTANT: STREAM_SEEK_CUR 1
64 CONSTANT: STREAM_SEEK_END 2
66 CONSTANT: LOCK_WRITE 1
67 CONSTANT: LOCK_EXCLUSIVE 2
68 CONSTANT: LOCK_ONLYONCE 4
70 CONSTANT: GUID_NULL GUID: {00000000-0000-0000-0000-000000000000}
72 COM-INTERFACE: IStream ISequentialStream {0000000C-0000-0000-C000-000000000046}
73 HRESULT Seek ( LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition )
74 HRESULT SetSize ( ULARGE_INTEGER* libNewSize )
75 HRESULT CopyTo ( IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten )
76 HRESULT Commit ( DWORD grfCommitFlags )
78 HRESULT LockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
79 HRESULT UnlockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
80 HRESULT Stat ( STATSTG* pstatstg, DWORD grfStatFlag )
81 HRESULT Clone ( IStream** ppstm ) ;
83 FUNCTION: HRESULT RegisterDragDrop ( HWND hWnd, IDropTarget* pDropTarget )
84 FUNCTION: HRESULT RevokeDragDrop ( HWND hWnd )
85 FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium )
87 : com-query-interface ( interface iid -- interface' )
89 [ IUnknown::QueryInterface check-ole32-error ]
92 : com-add-ref ( interface -- interface )
93 [ IUnknown::AddRef drop ] keep ; inline
95 ERROR: null-com-release ;
96 : com-release ( interface -- )
97 [ IUnknown::Release drop ] [ throw-null-com-release ] if* ; inline
99 : with-com-interface ( interface quot -- )
100 over [ com-release ] curry [ ] cleanup ; inline
102 DESTRUCTOR: com-release