typedef VARIANT ExposedType;
typedef IEnumVARIANT EnumeratorInterface;
typedef _Copy<VARIANT> CopyType;
根据以上的策略类,定义出枚举器对象:
typedef
CComEnumOnSTL< EnumeratorInterface, &__uuidof(EnumeratorInterface),
ExposedType,CopyType, ContainerType >
EnumeratorType;
此处typedef出来的EnumeratorType就是我们所需要的枚举器类。
改写GetEnum()方法的代码如下:
STDMETHODIMP CATLEnum::GetEnum(IUnknown** ppUnk)
{
return VCUE::CreateSTLEnumerator<EnumeratorType>(ppUnk, this, test_vec);
}
6、 整个服务器的编码工作已经完成了!我们只是简单的写了5个typedef语句,然后调用了ATL小组提供的一个函数,就完成了我们所需要的提供枚举器的功能。
Server端编码完成,下面我们编写一个Client端的程序对写好的Server进行测试。
出于简单起见,该Client端代码并没有实现过多的功能,仅仅是取得了枚举器的接口,并测试了枚举器的Next()方法而已。
整个Client端代码如下:
#include "stdafx.h"
#include <iostream>
#import "..\ATLEnum1\debug\ATLEnum1.dll" no_namespace
static const ULONG nBatchSize = 5 ;
int main()
{
CoInitialize(NULL);
IATLEnum* pATLEnum ;
HRESULT hRes = \
::CoCreateInstance(__uuidof(ATLEnum), NULL, CLSCTX_ALL, __uuidof(IATLEnum), (LPVOID*) &pATLEnum) ;