HRESULT CDShowCtrl::LoadGraphFile(IGraphBuilder *pGraph, const WCHAR* wszName) { IStorage *pStorage = 0; if (S_OK != StgIsStorageFile(wszName)) { return E_FAIL; } HRESULT hr = StgOpenStorage(wszName, 0, STGM_TRANSACTED | STGM_READ | STGM_SHARE_DENY_WRITE, 0, 0, &pStorage); if (FAILED(hr)) { return hr; } IPersistStream *pPersistStream = 0; hr = pGraph->QueryInterface(IID_IPersistStream, reinterpret_cast<void**>(&pPersistStream)); if (SUCCEEDED(hr)) { IStream *pStream = 0; hr = pStorage->OpenStream(L"ActiveMovieGraph", 0, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &pStream); if(SUCCEEDED(hr)) { hr = pPersistStream->Load(pStream); pStream->Release(); } pPersistStream->Release(); } pStorage->Release(); return hr; }
HRESULT LoadPropertyStoreFromStream(IStream *pstm, REFIID riid, void **ppv) { *ppv = NULL; STATSTG stat; HRESULT hr = pstm->Stat(&stat, STATFLAG_NONAME); if (SUCCEEDED(hr)) { IPersistStream *pps; hr = PSCreateMemoryPropertyStore(IID_PPV_ARGS(&pps)); if (SUCCEEDED(hr)) { if (stat.cbSize.QuadPart == 0) { hr = S_OK; // empty stream => empty property store } else if (stat.cbSize.QuadPart > (128 * 1024)) { hr = STG_E_MEDIUMFULL; // can't be that large } else { hr = pps->Load(pstm); } if (SUCCEEDED(hr)) { hr = pps->QueryInterface(riid, ppv); } pps->Release(); } } return hr; }
// @pymethod |PyIPersistStream|Load|Initializes an object from the stream where it was previously saved. PyObject *PyIPersistStream::Load(PyObject *self, PyObject *args) { IPersistStream *pMy = GetI(self); if (pMy==NULL) return NULL; PyObject *obStream; // @pyparm <o PyIStream>|stream||Stream object to load from. if (!PyArg_ParseTuple(args, "O:Load", &obStream)) return NULL; IStream *pStream; if (!PyCom_InterfaceFromPyInstanceOrObject(obStream, IID_IStream, (void **)&pStream, FALSE /*bNoneOK*/)) return NULL; PY_INTERFACE_PRECALL; HRESULT hr = pMy->Load(pStream); pStream->Release(); PY_INTERFACE_POSTCALL; if (FAILED(hr)) return PyCom_BuildPyException(hr, pMy, IID_IPersistStream); Py_INCREF(Py_None); return Py_None; // @comm This method loads an object from its associated stream. The seek pointer is set as it was in the most recent <om PyIPersistStream.Save> method. This method can seek and read from the stream, but cannot write to it. // @comm On exit, the seek pointer must be in the same position it was in on entry, immediately past the end of the data. }
HRESULT CLTDMLoader::LoadFromFile(LPDMUS_OBJECTDESC pDesc,IDirectMusicObject8 ** ppIObject) { HRESULT hr; hr = CoCreateInstance(pDesc->guidClass, NULL,CLSCTX_INPROC_SERVER,IID_IDirectMusicObject8, (void **) ppIObject); if (SUCCEEDED(hr)) { WCHAR wzFullPath[DMUS_MAX_FILENAME]; ZeroMemory( wzFullPath, sizeof(WCHAR) * DMUS_MAX_FILENAME ); CLTDMFileStream *pStream = new CLTDMFileStream ( this ); if (pStream) { if (pDesc->dwValidData & DMUS_OBJ_FULLPATH) { wcscpy(wzFullPath,pDesc->wszFileName); } else { // find the directory that matches this class and copy it to the path CLoadDirByClassItem* pItem = m_pLoadDirByClassList->Find(pDesc->guidClass); if (pItem != NULL) wcscpy(wzFullPath, pItem->GetPath()); // check if slash was on end of string if not add it if ((wzFullPath[wcslen(wzFullPath)-1] != m_wszBackSlash[0]) && (wzFullPath[wcslen(wzFullPath)-1] != m_wszForwardSlash[0])) { wcscat(wzFullPath, m_wszBackSlash); } // add filename to string wcscat(wzFullPath, pDesc->wszFileName); } hr = pStream->Open(wzFullPath,GENERIC_READ); if (SUCCEEDED(hr)) { IPersistStream* pIPS; hr = (*ppIObject)->QueryInterface( IID_IPersistStream, (void**)&pIPS ); if (SUCCEEDED(hr)) { // Now that we have the IPersistStream interface from the object, we can ask it to load from our stream! hr = pIPS->Load( pStream ); pIPS->Release(); } } pStream->Release(); } else { hr = E_OUTOFMEMORY; } if (FAILED(hr)) { (*ppIObject)->Release(); } } return hr; }
HRESULT SaveSerializedPropStorageToStream(IPersistSerializedPropStorage *psps, IStream *pstm) { IPersistStream *pPersistStream; HRESULT hr = psps->QueryInterface(IID_PPV_ARGS(&pPersistStream)); if (SUCCEEDED(hr)) { // implement size limit here hr = pPersistStream->Save(pstm, TRUE); pPersistStream->Release(); } return hr; }
/* 把当前工作的滤波器链表保存到*.grf */ void CVMR_Capture::SaveGraph(CString wFileName) { HRESULT hr; { IStorage* pStorage=NULL; // First, create a document file that will hold the GRF file hr = ::StgCreateDocfile(wFileName.AllocSysString(), STGM_CREATE|STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, 0, &pStorage); if (FAILED(hr)) { AfxMessageBox(TEXT("Can not create a document")); return; } // Next, create a stream to store. WCHAR wszStreamName[] = L"ActiveMovieGraph"; IStream *pStream; hr = pStorage->CreateStream(wszStreamName,STGM_WRITE|STGM_CREATE|STGM_SHARE_EXCLUSIVE, 0, 0, &pStream); if(FAILED(hr)) { AfxMessageBox(TEXT("Can not create a stream")); pStorage->Release(); return; } // The IpersistStream::Save method converts a stream // into a persistent object. IPersistStream *pPersist = NULL; m_pGB->QueryInterface(IID_IPersistStream, reinterpret_cast<void**>(&pPersist)); hr = pPersist->Save(pStream, TRUE); pStream->Release(); pPersist->Release(); if(SUCCEEDED(hr)) { hr = pStorage->Commit(STGC_DEFAULT); if (FAILED(hr)) { AfxMessageBox(TEXT("can not store it")); } } pStorage->Release(); } }
// @pymethod ULARGE_INTEGER|PyIPersistStream|GetSizeMax|Returns the size in bytes of the stream needed to save the object. PyObject *PyIPersistStream::GetSizeMax(PyObject *self, PyObject *args) { if (!PyArg_ParseTuple(args, ":GetSizeMax")) return NULL; IPersistStream *pMy = GetI(self); if (pMy==NULL) return NULL; ULARGE_INTEGER result; PY_INTERFACE_PRECALL; HRESULT hr = pMy->GetSizeMax(&result); PY_INTERFACE_POSTCALL; if (FAILED(hr)) return PyCom_BuildPyException(hr, pMy, IID_IPersistStream); return PyWinObject_FromULARGE_INTEGER(result); }
HRESULT CPkcs7::SaveIntoJavaClassFile(FILEHANDLE hFile,LPCOLESTR wszFileName,BOOL fClearDirty) // Save this signed data (presumably already signed) into the right place in the class file { HRESULT hr = S_OK; CFileStream stm; if (stm.OpenFileForWriting(hFile, wszFileName, FALSE)) { IPersistStream* pPerStream; hr = CJavaClassFile::CreateInstance(NULL, IID_IPersistStream, (LPVOID*)&pPerStream); if (hr == S_OK) { hr = pPerStream->Load(&stm); // load the class file if (hr == S_OK) { BLOB b; hr = CPersistMemoryHelper2::Save(&b, FALSE); // get our bits if (hr == S_OK) { IInsertSig* pSig; hr = pPerStream->QueryInterface(IID_IInsertSig, (LPVOID*)&pSig); if (hr == S_OK) { hr = pSig->SaveSig(&b); // stuff our bits in pSig->Release(); } FreeTaskMem(b); } if (hr == S_OK) { stm.Reset(); stm.Truncate(); hr = pPerStream->Save(&stm, FALSE); // save the class file } } pPerStream->Release(); } } else hr = HError(); if (hr == S_OK && fClearDirty) m_isDirty = FALSE; return hr; }
// @pymethod int|PyIPersistStream|IsDirty|Checks the object for changes since it was last saved. PyObject *PyIPersistStream::IsDirty(PyObject *self, PyObject *args) { if (!PyArg_ParseTuple(args, ":IsDirty")) return NULL; IPersistStream *pMy = GetI(self); if (pMy==NULL) return NULL; PY_INTERFACE_PRECALL; HRESULT hr = pMy->IsDirty(); PY_INTERFACE_POSTCALL; if ( FAILED(hr) ) return PyCom_BuildPyException(hr, pMy, IID_IPersistStream); // anything but S_FALSE means dirty. return PyInt_FromLong(hr != S_FALSE); // @rvalue S_OK (ie, 0)|The object has changed since it was last saved. // @rvalue S_FALSE (ie, 1)|The object has not changed since the last save. }
// This code was also brazenly stolen from the DX9 SDK // Pass it a file name in wszPath, and it will save the filter graph to that file. HRESULT SaveGraphFile(IGraphBuilder *pGraph, WCHAR *wszPath) { const WCHAR wszStreamName[] = L"ActiveMovieGraph"; HRESULT hr; IStorage *pStorage = NULL; // First, create a document file which will hold the GRF file hr = StgCreateDocfile( wszPath, STGM_CREATE | STGM_TRANSACTED | STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0, &pStorage); if(FAILED(hr)) { return hr; } // Next, create a stream to store. IStream *pStream; hr = pStorage->CreateStream( wszStreamName, STGM_WRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE, 0, 0, &pStream); if (FAILED(hr)) { pStorage->Release(); return hr; } // The IPersistStream converts a stream into a persistent object. IPersistStream *pPersist = NULL; pGraph->QueryInterface(IID_IPersistStream, reinterpret_cast<void**>(&pPersist)); hr = pPersist->Save(pStream, TRUE); pStream->Release(); pPersist->Release(); if (SUCCEEDED(hr)) { hr = pStorage->Commit(STGC_DEFAULT); } pStorage->Release(); return hr; }
HRESULT SaveGraphFile(IGraphBuilder *pGraph, WCHAR *wszPath) { const WCHAR wszStreamName[] = L"ActiveMovieGraph"; HRESULT hr; IStorage *pStorage = NULL; hr = StgCreateDocfile( wszPath, STGM_CREATE | STGM_TRANSACTED | STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0, &pStorage); if(FAILED(hr)) { return hr; } IStream *pStream; hr = pStorage->CreateStream( wszStreamName, STGM_WRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE, 0, 0, &pStream); if (FAILED(hr)) { pStorage->Release(); return hr; } IPersistStream *pPersist = NULL; pGraph->QueryInterface(IID_IPersistStream, (void**)&pPersist); hr = pPersist->Save(pStream, TRUE); pStream->Release(); pPersist->Release(); if (SUCCEEDED(hr)) { hr = pStorage->Commit(STGC_DEFAULT); } pStorage->Release(); return hr; }
HRESULT CLTDMLoader::LoadFromMemory(LPDMUS_OBJECTDESC pDesc,IDirectMusicObject8 ** ppIObject) { HRESULT hr; hr = CoCreateInstance(pDesc->guidClass, NULL,CLSCTX_INPROC_SERVER,IID_IDirectMusicObject8, (void **) ppIObject); if (SUCCEEDED(hr)) { CLTDMMemStream *pStream = new CLTDMMemStream ( this ); if (pStream) { hr = pStream->Open(pDesc->pbMemData,pDesc->llMemLength); if (SUCCEEDED(hr)) { IPersistStream* pIPS; hr = (*ppIObject)->QueryInterface( IID_IPersistStream, (void**)&pIPS ); if (SUCCEEDED(hr)) { // Now that we have the IPersistStream interface from the object, we can ask it to load from our stream! hr = pIPS->Load( pStream ); pIPS->Release(); } } pStream->Release(); } else { hr = E_OUTOFMEMORY; } if (FAILED(hr)) { (*ppIObject)->Release(); } } return hr; }
// @pymethod |PyIPersistStream|Save|Saves an object to the specified stream. PyObject *PyIPersistStream::Save(PyObject *self, PyObject *args) { IPersistStream *pMy = GetI(self); if (pMy==NULL) return NULL; PyObject *obStream; int bClearDirty; // @pyparm <o PyIStream>|stream||The stream to save to. // @pyparm int|bClearDirty||Indicates whether to clear the dirty flag after the save is complete if (!PyArg_ParseTuple(args, "Oi:Save", &obStream, &bClearDirty)) return NULL; IStream *pStream; if (!PyCom_InterfaceFromPyInstanceOrObject(obStream, IID_IStream, (void **)&pStream, FALSE /*bNoneOK*/)) return NULL; PY_INTERFACE_PRECALL; HRESULT hr = pMy->Save(pStream, bClearDirty); pStream->Release(); PY_INTERFACE_POSTCALL; if (FAILED(hr)) return PyCom_BuildPyException(hr, pMy, IID_IPersistStream); Py_INCREF(Py_None); return Py_None; }
HRESULT CPkcs7::LoadFromJavaClassFile(FILEHANDLE hFile,LPCOLESTR wszFileName) // Load this signed data from this Java class file { HRESULT hr = S_OK; CFileStream stm; if (stm.OpenFileForReading(hFile, wszFileName)) { IPersistStream* pPerStream; hr = CJavaClassFile::CreateInstance(NULL, IID_IPersistStream, (LPVOID*)&pPerStream); if (hr == S_OK) { hr = pPerStream->Load(&stm); // load the class file if (hr == S_OK) { IInsertSig* pSig; hr = pPerStream->QueryInterface(IID_IInsertSig, (LPVOID*)&pSig); if (hr == S_OK) { BLOB b; hr = pSig->LoadSig(&b); // get our bits back out if (hr == S_OK) { hr = CPersistMemoryHelper2::Load(&b); // load our bits FreeTaskMem(b); } pSig->Release(); } } pPerStream->Release(); } } else hr = HError(); return hr; }
void Explorerplusplus::OnAddressBarBeginDrag(void) { IDragSourceHelper *pDragSourceHelper = NULL; IDropSource *pDropSource = NULL; HRESULT hr; hr = CoCreateInstance(CLSID_DragDropHelper,NULL,CLSCTX_ALL, IID_IDragSourceHelper,(LPVOID *)&pDragSourceHelper); if(SUCCEEDED(hr)) { hr = CreateDropSource(&pDropSource,DRAG_TYPE_LEFTCLICK); if(SUCCEEDED(hr)) { LPITEMIDLIST pidlDirectory = m_pActiveShellBrowser->QueryCurrentDirectoryIdl(); FORMATETC ftc[2]; STGMEDIUM stg[2]; SetFORMATETC(&ftc[0],(CLIPFORMAT)RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR), NULL,DVASPECT_CONTENT,-1,TYMED_HGLOBAL); HGLOBAL hglb = GlobalAlloc(GMEM_MOVEABLE,1000); FILEGROUPDESCRIPTOR *pfgd = static_cast<FILEGROUPDESCRIPTOR *>(GlobalLock(hglb)); pfgd->cItems = 1; FILEDESCRIPTOR *pfd = (FILEDESCRIPTOR *)((LPBYTE)pfgd + sizeof(UINT)); /* File information (name, size, date created, etc). */ pfd[0].dwFlags = FD_ATTRIBUTES|FD_FILESIZE; pfd[0].dwFileAttributes = FILE_ATTRIBUTE_NORMAL; pfd[0].nFileSizeLow = 16384; pfd[0].nFileSizeHigh = 0; /* The name of the file will be the folder name, followed by .lnk. */ TCHAR szDisplayName[MAX_PATH]; GetDisplayName(pidlDirectory,szDisplayName,SHGDN_INFOLDER); StringCchCat(szDisplayName,SIZEOF_ARRAY(szDisplayName),_T(".lnk")); StringCchCopy(pfd[0].cFileName,SIZEOF_ARRAY(pfd[0].cFileName),szDisplayName); GlobalUnlock(hglb); stg[0].pUnkForRelease = 0; stg[0].hGlobal = hglb; stg[0].tymed = TYMED_HGLOBAL; /* File contents. */ SetFORMATETC(&ftc[1],(CLIPFORMAT)RegisterClipboardFormat(CFSTR_FILECONTENTS), NULL,DVASPECT_CONTENT,-1,TYMED_HGLOBAL); hglb = GlobalAlloc(GMEM_MOVEABLE,16384); IShellLink *pShellLink = NULL; IPersistStream *pPersistStream = NULL; HRESULT hr; hr = CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER, IID_IShellLink,(LPVOID*)&pShellLink); if(SUCCEEDED(hr)) { TCHAR szPath[MAX_PATH]; GetDisplayName(pidlDirectory,szPath,SHGDN_FORPARSING); pShellLink->SetPath(szPath); hr = pShellLink->QueryInterface(IID_IPersistStream,(LPVOID*)&pPersistStream); if(SUCCEEDED(hr)) { IStream *pStream = NULL; CreateStreamOnHGlobal(hglb,FALSE,&pStream); hr = pPersistStream->Save(pStream,TRUE); } } GlobalUnlock(hglb); stg[1].pUnkForRelease = 0; stg[1].hGlobal = hglb; stg[1].tymed = TYMED_HGLOBAL; IDataObject *pDataObject = NULL; POINT pt = {0,0}; hr = CreateDataObject(ftc,stg,&pDataObject,2); pDragSourceHelper->InitializeFromWindow(m_hAddressBar,&pt,pDataObject); DWORD dwEffect; DoDragDrop(pDataObject,pDropSource,DROPEFFECT_LINK,&dwEffect); CoTaskMemFree(pidlDirectory); pDataObject->Release(); pDropSource->Release(); } pDragSourceHelper->Release(); } }
BOOL DispReel::LoadToken(int id, BiffReader *pbr) { if (id == FID(PIID)) { pbr->GetInt((int *)pbr->m_pdata); } else if (id == FID(VER1)) { pbr->GetStruct(&m_d.m_v1, sizeof(Vertex2D)); } else if (id == FID(VER2)) { pbr->GetStruct(&m_d.m_v2, sizeof(Vertex2D)); } else if (id == FID(WDTH)) { pbr->GetFloat(&m_d.m_width); } else if (id == FID(HIGH)) { pbr->GetFloat(&m_d.m_height); } else if (id == FID(CLRB)) { pbr->GetInt(&m_d.m_backcolor); } else if (id == FID(TMON)) { pbr->GetBool(&m_d.m_tdr.m_fTimerEnabled); } else if (id == FID(TMIN)) { pbr->GetInt(&m_d.m_tdr.m_TimerInterval); } else if (id == FID(NAME)) { pbr->GetWideString((WCHAR *)m_wzName); } else if (id == FID(TRNS)) { pbr->GetBool(&m_d.m_fTransparent); } else if (id == FID(IMAG)) { pbr->GetString(m_d.m_szImage); } else if (id == FID(RCNT)) { float reel; pbr->GetFloat(&reel); m_d.m_reelcount = (int)reel; } else if (id == FID(RSPC)) { pbr->GetFloat(&m_d.m_reelspacing); } else if (id == FID(MSTP)) { pbr->GetFloat(&m_d.m_motorsteps); } else if (id == FID(SOUN)) { pbr->GetString(m_d.m_szSound); } else if (id == FID(UGRD)) { pbr->GetBool(&m_d.m_fUseImageGrid); } else if (id == FID(VISI)) { pbr->GetBool(&m_d.m_fVisible); } else if (id == FID(GIPR)) { pbr->GetInt(&m_d.m_imagesPerGridRow); } else if (id == FID(RANG)) { float dig; pbr->GetFloat(&dig); m_d.m_digitrange = (int)dig; } else if (id == FID(UPTM)) { pbr->GetInt(&m_d.m_updateinterval); } else if (id == FID(FONT)) //!! deprecated, only here to support loading of old tables { IFont *pIFont; FONTDESC fd; fd.cbSizeofstruct = sizeof(FONTDESC); fd.lpstrName = L"Times New Roman"; fd.cySize.int64 = 260000; //fd.cySize.Lo = 0; fd.sWeight = FW_BOLD; fd.sCharset = 0; fd.fItalic = 0; fd.fUnderline = 0; fd.fStrikethrough = 0; OleCreateFontIndirect(&fd, IID_IFont, (void **)&pIFont); IPersistStream * ips; pIFont->QueryInterface(IID_IPersistStream, (void **)&ips); ips->Load(pbr->m_pistream); pIFont->Release(); } else { ISelect::LoadToken(id, pbr); } return fTrue; }