开发一个中插入word文档的ActiveX有个数据持续化的问题,就是想把ActiveX的某个变量保存下次打开WORD时用这变量存到宿主word文档中
就是想把ActiveX的某个变量保存下次打开WORD时用这变量.我用  PersistStorage 时都需要保存一个文件,我想把这个存到宿主word文档中,不要别存个文件
,因为用户把WORD拿到别处也行看到ActiveX中的数据,请问高手怎么办?
::StgOpenStorage(
L"Doc3",
NULL,
STGM_READ | STGM_SHARE_EXCLUSIVE,
NULL,
0,
&spStorage );

解决方案 »

  1.   

    持续化IPersistStreamInit,派生自 IPersistStream,并再增加了一个函数 InitNew() 用来完成一个默认的组件属性初始化。
    这个持续性接口是最常用的InitNew()初始化控件中的变量,
    容器提供存储介质, 如IStream,
    通过Save()让组件自己存储它的变量值
    通过Load()让组件自己读入信息并初始化它的变量      具体去看MSDN
      

  2.   

    HRESULT hr ;
     
    CComPtr < IStorage > spStorage;
    CComPtr < IStream > spStream;
         hr = ::StgCreateDocfile(
    L"Doc3",
    STGM_CREATE | STGM_WRITE | STGM_SHARE_EXCLUSIVE,
    0,
    &spStorage );
    if( FAILED( hr ) )
    {
    AfxMessageBox( _T("不能建立复合文件") );
    return;
    }
    hr = spStorage->CreateStream(
    L"Ex28c Text",
    STGM_CREATE | STGM_WRITE | STGM_SHARE_EXCLUSIVE,
    0,
    0,
    &spStream );
    if( FAILED( hr ) )
    {
    AfxMessageBox( _T("不能建立流") );
    return;
    }
    CString m_strText=_T("123A不能建立流");
      ULONG nBytesWritten;
       char* aa ="abcd";
      spStream->Write((const char*)  aa,  5, &nBytesWritten); 
    这是我写的能保存,也能取出 来,问题是都是保存在一个外部文件中,我想只保存在调用者
    WORD的文档中(一个复合文件,不另存一个文件)
      

  3.   

    我在考虑实现IPropertyPersistBag接口,然后把数据作为属性保存~~