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 + -
显示快捷键?