开发一个中插入word文档的ActiveX有个数据持续化的问题,就是想把ActiveX的某个变量保存下次打开WORD时用这变量存到宿主word文档中
就是想把ActiveX的某个变量保存下次打开WORD时用这变量.我用 PersistStorage 时都需要保存一个文件,我想把这个存到宿主word文档中,不要别存个文件
,因为用户把WORD拿到别处也行看到ActiveX中的数据,请问高手怎么办?
::StgOpenStorage(
L"Doc3",
NULL,
STGM_READ | STGM_SHARE_EXCLUSIVE,
NULL,
0,
&spStorage );
就是想把ActiveX的某个变量保存下次打开WORD时用这变量.我用 PersistStorage 时都需要保存一个文件,我想把这个存到宿主word文档中,不要别存个文件
,因为用户把WORD拿到别处也行看到ActiveX中的数据,请问高手怎么办?
::StgOpenStorage(
L"Doc3",
NULL,
STGM_READ | STGM_SHARE_EXCLUSIVE,
NULL,
0,
&spStorage );
这个持续性接口是最常用的InitNew()初始化控件中的变量,
容器提供存储介质, 如IStream,
通过Save()让组件自己存储它的变量值
通过Load()让组件自己读入信息并初始化它的变量 具体去看MSDN
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的文档中(一个复合文件,不另存一个文件)