myproviderrs.h
来自「Visual_C++.NET实用编程百例」· C头文件 代码 · 共 131 行
H
131 行
// myProviderRS.h : CmyProviderRowset 的声明
#pragma once
#include "resource.h" // 主符号
class CmyProviderWindowsFile:
public WIN32_FIND_DATA
{
public:
BEGIN_PROVIDER_COLUMN_MAP(CmyProviderWindowsFile)
PROVIDER_COLUMN_ENTRY("FileAttributes", 1, dwFileAttributes)
PROVIDER_COLUMN_ENTRY("FileSizeHigh", 2, nFileSizeHigh)
PROVIDER_COLUMN_ENTRY("FileSizeLow", 3, nFileSizeLow)
PROVIDER_COLUMN_ENTRY_STR("FileName", 4, cFileName)
PROVIDER_COLUMN_ENTRY_STR("AltFileName", 5, cAlternateFileName)
END_PROVIDER_COLUMN_MAP()
};
// CmyProviderCommand
[
coclass,
noncreatable,
uuid("33D788D0-8EAB-4AD5-A855-7F0F147A417A"),
threading("apartment"),
registration_script("none")
]
class ATL_NO_VTABLE CmyProviderCommand :
public IAccessorImpl<CmyProviderCommand>,
public ICommandTextImpl<CmyProviderCommand>,
public ICommandPropertiesImpl<CmyProviderCommand>,
public IObjectWithSiteImpl<CmyProviderCommand>,
public IConvertTypeImpl<CmyProviderCommand>,
public IColumnsInfoImpl<CmyProviderCommand>,
public IInternalCommandConnectionImpl<CmyProviderCommand>
{
public:
// ICommand
public:
HRESULT FinalConstruct()
{
HRESULT hr = CConvertHelper::FinalConstruct();
if (FAILED (hr))
return hr;
hr = IAccessorImpl<CmyProviderCommand>::FinalConstruct();
if (FAILED(hr))
return hr;
return CUtlProps<CmyProviderCommand>::FInit();
}
void FinalRelease()
{
IAccessorImpl<CmyProviderCommand>::FinalRelease();
}
HRESULT WINAPI Execute(IUnknown * pUnkOuter, REFIID riid, DBPARAMS * pParams,
LONG * pcRowsAffected, IUnknown ** ppRowset);
static ATLCOLUMNINFO* GetColumnInfo(CmyProviderCommand* pv, ULONG* pcInfo)
{
return CmyProviderWindowsFile::GetColumnInfo(pv,pcInfo);
}
BEGIN_PROPSET_MAP(CmyProviderCommand)
BEGIN_PROPERTY_SET(DBPROPSET_ROWSET)
PROPERTY_INFO_ENTRY(IAccessor)
PROPERTY_INFO_ENTRY(IColumnsInfo)
PROPERTY_INFO_ENTRY(IConvertType)
PROPERTY_INFO_ENTRY(IRowset)
PROPERTY_INFO_ENTRY(IRowsetIdentity)
PROPERTY_INFO_ENTRY(IRowsetInfo)
PROPERTY_INFO_ENTRY(IRowsetLocate)
PROPERTY_INFO_ENTRY(BOOKMARKS)
PROPERTY_INFO_ENTRY(BOOKMARKSKIPPED)
PROPERTY_INFO_ENTRY(BOOKMARKTYPE)
PROPERTY_INFO_ENTRY(CANFETCHBACKWARDS)
PROPERTY_INFO_ENTRY(CANHOLDROWS)
PROPERTY_INFO_ENTRY(CANSCROLLBACKWARDS)
PROPERTY_INFO_ENTRY(LITERALBOOKMARKS)
PROPERTY_INFO_ENTRY(ORDEREDBOOKMARKS)
END_PROPERTY_SET(DBPROPSET_ROWSET)
END_PROPSET_MAP()
};
class CmyProviderRowset :
public CRowsetImpl< CmyProviderRowset, CmyProviderWindowsFile, CmyProviderCommand>
{
public:
HRESULT Execute(DBPARAMS * pParams, LONG* pcRowsAffected)
{
BOOL bFound = FALSE;
HANDLE hFile;
CW2TEX<_MAX_PATH> szDir(m_strCommandText == L"" ? L"*.*" : m_strCommandText);
CmyProviderWindowsFile wf;
hFile = FindFirstFile(szDir, &wf);
if (hFile == INVALID_HANDLE_VALUE)
return DB_E_ERRORSINCOMMAND;
LONG cFiles = 1;
BOOL bMoreFiles = TRUE;
while (bMoreFiles)
{
_ATLTRY
{
m_rgRowData.Add(wf);
}
_ATLCATCH( e )
{
_ATLDELETEEXCEPTION( e )
return E_OUTOFMEMORY;
}
bMoreFiles = FindNextFile(hFile, &wf);
cFiles++;
}
FindClose(hFile);
if (pcRowsAffected != NULL)
*pcRowsAffected = cFiles;
return S_OK;
}
};
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?