USING: alien alien.c-types alien.destructors windows.com.syntax
windows.ole32 windows.types continuations kernel alien.syntax
-libc destructors accessors alien.data ;
+libc destructors accessors alien.data classes.struct windows.kernel32 ;
IN: windows.com
LIBRARY: ole32
ULONG Release ( ) ;
C-TYPE: IAdviseSink
+C-TYPE: IEnumFORMATETC
+C-TYPE: IEnumSTATDATA
COM-INTERFACE: IDataObject IUnknown {0000010E-0000-0000-C000-000000000046}
HRESULT GetData ( FORMATETC* pFormatetc, STGMEDIUM* pmedium )
HRESULT DragLeave ( )
HRESULT Drop ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) ;
-FUNCTION: HRESULT RegisterDragDrop ( HWND hWnd, IDropTarget* pDropTarget ) ;
-FUNCTION: HRESULT RevokeDragDrop ( HWND hWnd ) ;
-FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium ) ;
+COM-INTERFACE: ISequentialStream IUnknown {0C733A30-2A1C-11CE-ADE5-00AA0044773D}
+ HRESULT Read ( void* pv, ULONG cb, ULONG* pcbRead )
+ HRESULT Write ( void* pv, ULONG cb, ULONG* pcbWritten ) ;
+
+STRUCT: STATSTG
+ { pwcsName LPOLESTR }
+ { type DWORD }
+ { cbSize ULARGE_INTEGER }
+ { mtime FILETIME }
+ { ctime FILETIME }
+ { atime FILETIME }
+ { grfMode DWORD }
+ { grfLocksSupported DWORD }
+ { clsid CLSID }
+ { grfStateBits DWORD }
+ { reserved DWORD } ;
+
+CONSTANT: STGM_READ 0
+CONSTANT: STGM_WRITE 1
+CONSTANT: STGM_READWRITE 2
+
+CONSTANT: STG_E_INVALIDFUNCTION 0x80030001
+
+CONSTANT: STGTY_STORAGE 1
+CONSTANT: STGTY_STREAM 2
+CONSTANT: STGTY_LOCKBYTES 3
+CONSTANT: STGTY_PROPERTY 4
+
+CONSTANT: STREAM_SEEK_SET 0
+CONSTANT: STREAM_SEEK_CUR 1
+CONSTANT: STREAM_SEEK_END 2
+
+CONSTANT: LOCK_WRITE 1
+CONSTANT: LOCK_EXCLUSIVE 2
+CONSTANT: LOCK_ONLYONCE 4
+
+CONSTANT: GUID_NULL GUID: {00000000-0000-0000-0000-000000000000}
+
+COM-INTERFACE: IStream ISequentialStream {0000000C-0000-0000-C000-000000000046}
+ HRESULT Seek ( LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition )
+ HRESULT SetSize ( ULARGE_INTEGER* libNewSize )
+ HRESULT CopyTo ( IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten )
+ HRESULT Commit ( DWORD grfCommitFlags )
+ HRESULT Revert ( )
+ HRESULT LockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
+ HRESULT UnlockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
+ HRESULT Stat ( STATSTG* pstatstg, DWORD grfStatFlag )
+ HRESULT Clone ( IStream** ppstm ) ;
+
+FUNCTION: HRESULT RegisterDragDrop ( HWND hWnd, IDropTarget* pDropTarget )
+FUNCTION: HRESULT RevokeDragDrop ( HWND hWnd )
+FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium )
: com-query-interface ( interface iid -- interface' )
- [
- void* malloc-object &free
- [ IUnknown::QueryInterface ole32-error ] keep *void*
- ] with-destructors ;
+ { void* }
+ [ IUnknown::QueryInterface check-ole32-error ]
+ with-out-parameters ;
: com-add-ref ( interface -- interface )
[ IUnknown::AddRef drop ] keep ; inline
+ERROR: null-com-release ;
: com-release ( interface -- )
- IUnknown::Release drop ; inline
+ [ IUnknown::Release drop ] [ null-com-release ] if* ; inline
: with-com-interface ( interface quot -- )
over [ com-release ] curry [ ] cleanup ; inline