Load flash from memory stream
2010-08-09 16:59
495 查看
http://stackoverflow.com/questions/423166/flash-activex-how-to-load-movie-from-memory-or-resource-or-stream
void flash_load_memory(FlashWidget* w, void* data, ULONG size) { FlashMemoryStream fStream = FlashMemoryStream(data, size); IPersistStreamInit* psStreamInit = NULL; w->mFlashInterface->QueryInterface(IID_IPersistStreamInit,(LPVOID*) &psStreamInit); if(psStreamInit) { psStreamInit->InitNew(); psStreamInit->Load((LPSTREAM)&fStream); psStreamInit->Release(); } } class FlashMemoryStream : IStream { public: FlashMemoryStream(void* data,ULONG size) { this->data = data; this->size = size; this->pos = 0; } HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID* ppv) { return E_NOTIMPL; } ULONG STDMETHODCALLTYPE AddRef() { return E_NOTIMPL; } ULONG STDMETHODCALLTYPE Release() { return E_NOTIMPL; } // IStream methods STDMETHOD(Read) (void *pv,ULONG cb,ULONG *pcbRead) { if(pos == 0 && cb == 4) { memcpy(pv,"fUfU",4); pos += 4; return S_OK; } else if(pos == 4 && cb == 4) { memcpy(pv,&size,4); size += 8; pos += 4; return S_OK; } else { if(pos + cb > size) cb = size - pos; if(cb == 0) return S_FALSE; memcpy(pv,(char*)data + pos - 8,cb); if(pcbRead) (*pcbRead) = cb; pos += cb; return S_OK; } } STDMETHOD(Write) (void const *pv,ULONG cb,ULONG *pcbWritten) { return E_NOTIMPL; } STDMETHOD(Seek) (LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition) { return E_NOTIMPL; } STDMETHOD(SetSize) (ULARGE_INTEGER libNewSize) { return E_NOTIMPL; } STDMETHOD(CopyTo) (IStream *pstm,ULARGE_INTEGER cb,ULARGE_INTEGER *pcbRead,ULARGE_INTEGER *pcbWritten) { return E_NOTIMPL; } STDMETHOD(Commit) (DWORD grfCommitFlags) { return E_NOTIMPL; } STDMETHOD(Revert) (void) { return E_NOTIMPL; } STDMETHOD(LockRegion) (ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) { return E_NOTIMPL; } STDMETHOD(UnlockRegion) (ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) { return E_NOTIMPL; } STDMETHOD(Stat) (STATSTG *pstatstg,DWORD grfStatFlag) { return E_NOTIMPL; } STDMETHOD(Clone) (IStream **ppstm) { return E_NOTIMPL; } void* data; ULONG size; ULONG pos; };
相关文章推荐
- Delphi XE2 之 FireMonkey 入门(33) - 控件基础: TFmxObject: SaveToStream、LoadFromStream、SaveToBinStream、LoadFromBinStream
- Load PE from memory(反取证)(未完)
- Loading Xps from MemoryStream
- Downloading files from a server to client, using ASP.Net, when file size is too big for MemoryStream using Generic Handlers (ashx)
- How to Load Images from a Stream
- 在Dll中使用 TFDQuery 的 LoadFromStream 方法注意问题
- Delphi_MemoryModule — load DLL from memory. Also includes hooking utilities.
- 【Delphi】从内存(MemoryStream)使用WMP(WindowsMediaPlayer)控件播放视频音频(Play Video with WMP from MemoryStream)
- 学习 TTreeView [6] - SaveToFile、LoadFromStream、SaveToStream、LoadFromFile
- Imageen LoadStreamFromURL 函数补加
- Delphi XE2 之 FireMonkey 入门(33) - 控件基础: TFmxObject: SaveToStream、LoadFromStream、SaveToBinStream、LoadFromBinStream
- Direct3D: TextureLoad.FromStream的问题.
- You are trying to load data from a www stream which had the following error,Unsupported protocol
- How to Load Images from a Stream
- devmemdata.loadfromstream使用方法
- Couldn't load a xcode project because it is already opened from another project or workspace
- Failed to load admin-sidebar.xml file from Openfire classes
- “Can not load DLL“.\ADTVR_Live.dll”: Can not find the module. (Exception From HRESULT:0x8007007E)。
- Protect Flash Files from Being Downloaded
- C#反射之Assembly.Load,Assembly.LoadFile 与 Assembly.LoadFrom方法介绍