|
|
1
8
集合或多或少基于约定。它们实现
这个
在IDL中使用
以下是一些msdn条目:
Design Considerations for ActiveX Objects
|
|
|
2
2
让我们以这个vbscript片段为目标
尤其是myObject的实现。至少,您必须在默认DispInterface(它的双/DispInterface用于讨论DispID)上实现一个具有DispID_NewEnum的方法/PropGet。你想叫什么就叫什么,没关系。大多数集合使用NewEnum,并在IDL中将其标记为隐藏。vb6使用下划线前缀来标记隐藏的方法,因此您可能会将newenum视为推荐,但它是一种货物崇拜ATL。 你 不要 需要任何计数、项目、添加、删除、清除或任何其他方法(在默认接口上)。您可以提供这些作为一种便利(特别是项目访问器,可能还可以计数),但是您不必,这样就可以使上面的示例代码正常工作。 下一步,重新评估 有 是一个单独的对象(称为枚举器),它通过使用指向myObject的(私有)指针来实现IEnumVariant接口。在IDL中,您可以声明retval为IUnknown,这里没有任何错误。最有趣的是你 有 为了只在ienumvariant上实现下一个方法,如果您喜欢或可选地实现它们,您可以在其余的方法上返回e_notimplemented,尽管它们从来没有被每个方法调用过。更容易实现的是next的celt参数(请求的项目数)是 总是 1,所以对于每个请求项,总是逐个进行。 在ATL中可以使用ccomenumonstr等在STL容器上创建“代理”枚举器,或者基于数组的枚举器ATL提供(并排除STL)。 |
|
|
3
0
有关如何实现脚本编程语言中自然使用的COM集合的好示例,请查看 my website 它提供了一个如何做到这一点的综合示例… |
|
|
RoToR · 烧瓶迁移python2到3导入错误:无法导入名称 9 年前 |
|
|
Vjardel · iOS 9中已弃用,兼容吗? 10 年前 |
|
|
Sinros · C#通过代码设置兼容性设置 10 年前 |
|
|
Friso · 如何将空字符串解析为字节数组? 11 年前 |
|
|
Andrei Chernykh · AngularDart浏览器兼容性 11 年前 |
|
|
ilMattion · Internet Explorer复古兼容性 12 年前 |