⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 writeole.cpp

📁 用于数据流压缩的huffman算法源代码
💻 CPP
字号:
#include <ole2.h>							
#include <ole2ver.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
BOOL InitCOM()
{
   DWORD coVersion=CoBuildVersion();
   if( HIWORD(coVersion)!=rmm||LOWORD(coVersion)<rup )
	   {
	      printf("bad version of COM\n");
	      return FALSE ; 
        }
   HRESULT hErr=CoInitialize(NULL);
   if(FAILED(GetScode(hErr))) 
     { printf("Failed to initialize OLE!\n");
       return  FALSE ; }
 return TRUE ;
}


void DeinitCOM()
{
	   CoUninitialize();
}


void readOleFile( char * mfilename,
				  char * mstreamname,
				  char * buffer,
				  long * length)
{
  HRESULT    hErr ;
  LPSTORAGE  pStg ;
  LPSTREAM   pStm ;
  LARGE_INTEGER dlibMove;
  wchar_t wfilename[120];
  wchar_t wstreamname[64];
  int iMessageSize=96,k,j;
  dlibMove.LowPart=0;
  dlibMove.HighPart=0;
  if( !InitCOM()) return;
  while((SetMessageQueue(iMessageSize)==0)&&(iMessageSize>0)){
  	   iMessageSize-=8;}
 
  j=strlen(mfilename);
  k=mbstowcs(wfilename,mfilename,j+1);
  j=strlen(mstreamname);
  k=mbstowcs(wstreamname,mstreamname,j+1);
  
  hErr=StgOpenStorage(
	          wfilename,
			  NULL,
			  STGM_TRANSACTED|STGM_WRITE,
			  NULL,
			  0,
			  & pStg);
 if(FAILED(hErr)) { DeinitCOM();* length=0;return;} 

 hErr=pStg->OpenStream( wstreamname,
	                    0,
						STGM_READWRITE|STGM_DIRECT|STGM_SHARE_EXCLUSIVE,
                        0,
						&pStm );
 if(FAILED(hErr)) {
   pStg->Release(); DeinitCOM();*length=0;return;}
 hErr=pStm->Seek(dlibMove,STREAM_SEEK_END,NULL); 
 if(FAILED(hErr)) {
    pStm->Release();
	pStg->Release();
   DeinitCOM();
   *length=0;
   return;}
 j=strlen(buffer);
 hErr=pStm->Write(buffer,j,(unsigned long *)length);
 if(FAILED(hErr)) {
    pStm->Release();
	pStg->Release();
   DeinitCOM();
   *length=0;
   return;}
 hErr=pStm->Commit(STGC_DEFAULT);
 if(FAILED(hErr)) {
    pStm->Release();
	pStg->Release();
   DeinitCOM();
   *length=0;
   return;}
 hErr=pStm->Release();
 hErr=pStg->Commit(STGC_DEFAULT);
 if(FAILED(hErr)) {
   pStg->Release();
   DeinitCOM();
   *length=0;
   return;}
 hErr=pStg->Release();
 DeinitCOM();return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -