复合文档操作-读写结构体

存储结构体

#include "stdafx.h"
#include <objbase.h.>

#define RESULT_OK(hr) if (!SUCCEEDED(hr)) goto Exit0;
#define RELEASE_INTERFACE(X) if (X) { (X)->Release(); (X) = NULL; }

class TempData
{
public:
    char data[256];
    int count;
} *p;

int _tmain(int argc, _TCHAR* argv[])
{
    IStorage* piStr = NULL;
    IStorage* piSubStr = NULL;
    HRESULT   hr = E_FAIL;
    IStream* piStream = NULL;
    ULONG   ulSize = 0;
    TCHAR   szBuf[] = _T("0123456789");
    const TCHAR* pszFilename = _T("c://test.mcb");

    TempData data;
   
    char temp[]="1234567890";
    data.count =strlen(temp);
    strcpy(data.data, temp);
    p = &data;
    hr = CoInitialize(NULL);
    RESULT_OK(hr);

    // 创建复合文档
    hr = StgCreateDocfile(pszFilename, STGM_DIRECT|STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, NULL, &piStr);
    RESULT_OK(hr);


    // 创建数据流
    hr = piStr->CreateStream(_T("mcbStream"), STGM_DIRECT|STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, 0, 0, &piStream);
    RESULT_OK(hr);

    // 写数据
    //hr = piStream->Write(szBuf, _tcslen(szBuf) * sizeof(TCHAR), &ulSize) ;
    hr = piStream->Write(p, sizeof(TempData), &ulSize) ;
    RESULT_OK(hr);

Exit0:

    //RELEASE_INTERFACE(piStream);
    RELEASE_INTERFACE(piSubStr);
    RELEASE_INTERFACE(piStr);

    CoUninitialize();

    return 0;
}

读取结构体

#include "stdafx.h"
#include <objbase.h.>

#define RESULT_OK(hr) if (!SUCCEEDED(hr)) goto Exit0;
#define RELEASE_INTERFACE(X) if (X) { (X)->Release(); (X) = NULL; }

class TempData
{
public:
    char data[256];
    int count;
} *p;

int _tmain(int argc, _TCHAR* argv[])
{
    IStorage* piStr = NULL;
    HRESULT   hr = E_FAIL;
    IStream* piStream = NULL;
    ULONG   ulSize = 0;
    const TCHAR* pszFilename = _T("c://test.mcb");

    hr = CoInitialize(NULL);
    RESULT_OK(hr);

    // 创建复合文档
    hr = StgOpenStorage(pszFilename,NULL, STGM_DIRECT|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, NULL, NULL, &piStr);
    RESULT_OK(hr);

    hr = piStr->OpenStream(_T("mcbStream"), NULL, STGM_DIRECT|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, NULL, &piStream);

    TempData Data;
    p= &Data;
    hr = piStream->Read(p, sizeof(TempData), &ulSize) ;

    MessageBoxA(0,p->data,0,0);

Exit0:

    RELEASE_INTERFACE(piStream);
    RELEASE_INTERFACE(piStr);
    return 0;
}

 

环境:WINXP(SP3)+IE8

IDE:VS2005

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值