将键值对数组发送到COM中的API的最佳方法

时间:2009-05-15 06:16:49

标签: c++ com

我想创建一个API接口,可以接受COM中的键值对数组。 最好的方法是什么? 我可以考虑发送BSTR的SAFEARRAY。每个BSTR都可以被认为是键值对。需要添加打包/解包键值的逻辑。

4 个答案:

答案 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