Bin*_*ier 1 c++ vb6 compatibility atl
或VB6兼容 - 集合对象.
我们通过一组API为我们的.net产品提供钩子.
我们需要继续支持从VB6调用API的客户,因此我们需要继续支持VB6集合对象(在.net中使用VBA.Collection很简单).
问题是支持一些使用VBScript来调用我们API的网站.VBScript没有集合对象的概念,因此要创建一个集合对象以传递给我们的API,我们构建了一个VB6 ActiveX DLL,它提供了一个"CreateCollection"方法.此方法只是创建并传回一个新的集合对象.问题解决了.
经过多年的修剪,移植和重建,这个DLL是我们唯一的VB6代码.因此,我们仍然需要在Dev&build Machines上安装Visual Studio 6.
我不满意我们依赖这个DLL有几个原因(我个人不喜欢VB6不是其中之一).最重要的是微软不再支持Visual Studio 6.
我的问题是,如何让ATL创建一个实现与VB6集合对象相同的接口的集合对象.
我对C++有一个很好的处理,但只是对ATL的松散掌握 - 我可以创建简单的对象并实现简单的方法,但这超出了我的范围.
集合或多或少基于约定.他们实现IDispatch并公开了一些标准方法和属性:
Add()- 可选Remove()- 可选Item()Count- 只读_NewEnum- 隐藏,只读,返回指向实现的枚举器对象的指针IEnumVariant该_NewEnum属性是允许Visual Basic的For Each.
在IDL中,您使用dual接口并:
DISPID_VALUE 对于 Item()[propget, id(DISPID_NEWENUM), restricted] HRESULT _NewEnum([out, retval] IUnknown** pVal)以下是一些MSDN条目:ActiveX对象的设计注意事项以下
是一些ATL特定的便利:ATL集合和枚举器