/*---------------------------------------------------------------------------------------------- Insert material as appropriate to display the specified object. This method has not yet been tested...maybe not even compiled? ----------------------------------------------------------------------------------------------*/ STDMETHODIMP VwBaseVc::DisplayEmbeddedObject(IVwEnv * pvwenv, HVO hvo) { BEGIN_COM_METHOD; ChkComArgPtr(pvwenv); // See if it is a CmPicture. ISilDataAccessPtr qsda; CheckHr(pvwenv->get_DataAccess(&qsda)); int clsid; CheckHr(qsda->get_IntProp(hvo, kflidCmObject_Class, &clsid)); if (clsid != kclidCmPicture) return S_OK; // don't know how to deal with it. StrUni stuRootDir = DirectoryFinder::FwRootDataDir(); HVO hvoFile; CheckHr(qsda->get_ObjectProp(hvo, kflidCmPicture_PictureFile, &hvoFile)); if (hvoFile == 0) return S_OK; SmartBstr sbstrFileName; CheckHr(qsda->get_UnicodeProp(hvoFile, kflidCmFile_InternalPath, &sbstrFileName)); if (sbstrFileName.Length() == 0) return S_OK; StrUni stuPath; stuPath.Format(L"%s,%s,%s", stuRootDir.Chars(), L"\\", sbstrFileName.Chars()); IPicturePtr qpic; try { IStreamPtr qstrm; FileStream::Create(stuPath, STGM_READ, &qstrm); STATSTG stg; CheckHr(qstrm->Stat(&stg, STATFLAG_NONAME)); LONG cbdata = (LONG)stg.cbSize.QuadPart; CheckHr(::OleLoadPicture(qstrm, cbdata, FALSE, IID_IPicture, (LPVOID *)&qpic)); CheckHr(pvwenv->AddPicture(qpic, ktagNotAnAttr, 0, 0)); } catch (...) { return S_OK; // if anything goes wrong (e.g., file not found), just give up for now. // Todo: insert a 'file XXX not found string. } // Todo: also add the caption. END_COM_METHOD(g_fact, IID_IVwViewConstructor); }
ULONG CV8File::Deflate(unsigned char *DataIn, ULONG DataInSize, unsigned char **DataOut) { // ������� ����� ����� �� string HRESULT hr; //USES_CONVERSION; /* IzlibEnginePtr iLibEngine; CoInitialize(NULL); hr = iLibEngine.CreateInstance(L"V75.zlibEngine"); if (FAILED(hr)) { AfxMessageBox("err"); return 0; } */ IStreamPtr pStreamNew; IStream *pIStrNew; if (S_OK == CreateStreamOnHGlobal(NULL, TRUE, &pIStrNew)) { pStreamNew.Attach(pIStrNew, false); ULONG pcbWritten = 0; if (pIStrNew->Write(DataIn, DataInSize, &pcbWritten) != S_OK) { AfxMessageBox("err"); //pBkEndUI->DoMessageLine("pStreamOut->Read(&lpStr[0], cbStreamSizeOut, &pcbRead) != S_OK", mmBlackErr); return 0; } } LARGE_INTEGER __zero; __zero.QuadPart = __int64(0); if (pStreamNew->Seek(__zero, 0, NULL) == S_OK) { } ULONG cbStreamSizeOut; IStreamPtr pStreamOut; IStream *pIStrOut; if (S_OK == CreateStreamOnHGlobal(NULL, TRUE, &pIStrOut)) { pStreamOut.Attach(pIStrOut, false); try { //CoInitialize(NULL); //IzlibEnginePtr iLibEngine; //hr = iLibEngine.CreateInstance(L"V75.zlibEngine"); //if (FAILED(hr)) //{ // //pBkEndUI->DoMessageLine("error iLibEngine->pkDecompress", mmBlackErr); // AfxMessageBox("err"); // return 0; //} hr = iLibEngine->pkCompress(pStreamNew, pStreamOut); if (FAILED(hr)) { //pBkEndUI->DoMessageLine("error iLibEngine->pkDecompress", mmBlackErr); AfxMessageBox("err"); return 0; } else { STATSTG St; pStreamOut->Stat(&St, STATFLAG_NONAME); cbStreamSizeOut = St.cbSize.LowPart; LARGE_INTEGER __zero; __zero.QuadPart = __int64(0); if (pStreamOut->Seek(__zero, 0, NULL) == S_OK) { *DataOut = (unsigned char*)realloc(*DataOut, cbStreamSizeOut); ULONG pcbRead = 0; if (pStreamOut->Read(*DataOut, cbStreamSizeOut, &pcbRead) != S_OK) { AfxMessageBox("err"); //pBkEndUI->DoMessageLine("pStreamOut->Read(&lpStr[0], cbStreamSizeOut, &pcbRead) != S_OK", mmBlackErr); return 0; } } else { AfxMessageBox("err"); //pBkEndUI->DoMessageLine("pStreamOut->Seek(__zero, 0, NULL) != S_OK", mmBlackErr); return 0; } } } catch (_com_error& err) { //CString str; //str.Format("V75.zlibEngine Error:%s", err.ErrorMessage()); AfxMessageBox(err.ErrorMessage()); //pBkEndUI->DoMessageLine(str, mmBlackErr); return 0; } } else { //pBkEndUI->DoMessageLine("error in CreateStreamOnHGlobal", mmBlackErr); AfxMessageBox("err"); return 0; } return cbStreamSizeOut; }