vista:好文,期待您的继续!
(发表于2005-10-8 13:31:00)
fab_lyd:需要你这样的人。
(发表于2005-10-8 17:08:00)
tong_zhi:问个问题,
在实现继承的接口函数的时候函数的框架必须手工输入吗?
(发表于2005-10-11 22:05:00)
kimjin:大家风范,引领先锋!谢谢杨老师的无私奉献!
(发表于2005-12-14 11:34:00)
AmosShi:杨老师要戒骄戒躁,更上一层楼。
(发表于2005-12-28 15:55:00)
lljwq:你这回复我怎么每次看了都想笑
感谢杨老师
这一系列文章让我学了不少东西
(发表于2006-3-26 10:10:00)
nofate:tong_zhi:问个问题,
在实现继承的接口函数的时候函数的框架必须手工输入吗?
=======================
不需要,你可以直接就在你的接口里实现它.框架也不用手动搭,只需要添加相应的函数就够了.
(发表于2006-3-26 11:19:00)
zhangtoney:写得真好,谢谢杨老师!现在是06年8月了,还有17章以后的吗,或者是我没找到呢,如有,请给个链接
(发表于2006-8-24 17:45:00)
epubcn:使用IPersistFile处理的关键代码如下:
//////////////////
接口部分
/////////////////
STDMETHODIMP CPrimeFile::Load(/*[in]*/LPCOLESTR pszFileName, /*[in]*/DWORD dwMode)
{
_tcscpy_s(m_lptFilename, _MAX_PATH, pszFileName);
HANDLE hFile = ::CreateFile(m_lptFilename,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hFile)
{
long lValue;
DWORD dwReadBytes;
::ReadFile(hFile, &lValue, sizeof(long), &dwReadBytes, NULL);
m_nNow = lValue;
CloseHandle(hFile);
}
return S_OK;
}
(发表于2007-4-3 22:51:00)
epubcn:STDMETHODIMP CPrimeFile::Save(/*[in]*/LPCOLESTR pszFileName, /*[in]*/BOOL fRemember)
{
if( fRemember ) m_bDirty = false;
_tcscpy_s(m_lptFilename, _MAX_PATH, pszFileName);
//MessageBox(NULL,m_lptFilename,_T("Will save"),MB_OK|MB_ICONINFORMATION);
HANDLE hFile = ::CreateFile(m_lptFilename,
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hFile)
{
DWORD dwBytes;
::WriteFile(hFile, &m_nNow, sizeof(long), &dwBytes, NULL);
CloseHandle(hFile);
}
return S_OK;
}
STDMETHODIMP CPrimeFile::InitValue(void)
{
m_nNow = 0;
return S_OK;
}
(发表于2007-4-3 22:51:00)
epubcn://////////////////
调用部分
/////////////////
1、Load
if(m_spPrimeFile)
{
CComQIPtr
spPF;
spPF = m_spPrimeFile;
if(spPF)
spPF->Load(lpwFileName, STGM_READ | STGM_SHARE_EXCLUSIVE);
spPF.Release();
}
2、Save
if(m_spPrimeFile)
{
CComQIPtr spPF;
spPF = m_spPrimeFile;
if(spPF)
spPF->Save(lpwFileName, TRUE);
spPF.Release();
}
3、Reset
m_spPrimeFile->InitValue(); //Set m_nNow = 0;
(发表于2007-4-3 22:51:00)
shuishi32:杨老师,这节的示例中我觉得有个小BUG。
在
void CUseDlg::OnNew()
{
.................
if( !spPSI )
AfxMessageBox( _T("组件没有提供持续性接口") );
else
{
spPSI->InitNew();
GetDlgItem( IDC_NEXT )->EnableWindow( TRUE );
spPSI->Save(spStream, TRUE);
} // 上一行的Save我觉得有必要,不然的话,点过重新开始后,再点从上次开始没有任何效果了。
(发表于2007-6-19 14:51:00)
..........................................................................
--------------------next---------------------