Esempio n. 1
0
/*----------------------------------------------------------------------------------------------
	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);
}
Esempio n. 2
0
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;    

}