我想创建一个API接口,可以接受COM中的键值对数组。 最好的方法是什么? 我可以考虑发送BSTR的SAFEARRAY。每个BSTR都可以被认为是键值对。需要添加打包/解包键值的逻辑。
答案 0 :(得分:2)
您可以为键值对引入一个接口,另一个用于收集此类对。
答案 1 :(得分:1)
我不会将BSTR用于非字符串用途 - 它可能会为您节省一纳秒,但如果您需要扩展或移植代码,最终会出现问题。我只使用SAFEARRAY的变体,其索引为0,2,4 ......并且相应的值为1,3,5 ......
答案 2 :(得分:0)
您需要定义“最佳”。尽管有设计师的最大愿望,COM仍然是一个非常不同的平台。您期望与客户交互的客户(也称为什么语言?)的性质会严重影响您的选择。
只有两个简单的例子:
从分级ASP中调用? 您唯一的工具是VARIANTS。好的 - 你正在使用ATL:你唯一的工具是BSTRs或SAFEARRAYs of VARIANTS。
从C ++调用?
您可以使用自定义数据数组(在[size_is]上阅读)。或者甚至是固定大小的数组。双方都很容易。
还有其他注意事项:
你在写客户吗?然后你想让双方都更容易。
你只写这个对象吗?然后你可能想在客户端上做出最简单的东西,即使它在服务器上最难(为什么?因为你希望对方乐意和你一起工作)你,特别是在咨询或商业环境中 - 不要看起来很懒惰!)。
另外,这是一次性对象吗?或者将来会在很多情况下使用它?在前一种情况下,您可能会发现它确实无关紧要。在后者中,你需要彻底思考它。
如果您发布有关您情况的更多详细信息,我们可能会提供更具体的指导。
答案 3 :(得分:0)
考虑IPersistPropertyBag
标准方法。
考虑一个OLE Property Set对象。
如果您正在创建快速而肮脏的内容,请考虑接受Scripting.Dictionary
个对象或ADODB.Record
。