C++ 向COM中的API发送键值对数组的最佳方法

C++ 向COM中的API发送键值对数组的最佳方法,c++,com,C++,Com,我想用API创建一个接口,可以接受COM中的键值对数组。 最好的方法是什么? 我可以考虑发送BSTR的SAFEARRAY。每个BSTR都可以被视为键值对。需要添加打包/解包键值的逻辑。我不会将BSTR用于非字符串用途——它可能会节省您一纳秒的时间,但最终会在您需要扩展或移植代码时出现问题。我只会使用索引为0、2、4的安全变量数组。。。以及1、3、5、…处的相应值,您可以为键值对引入一个接口,并为这些对的集合引入另一个接口。您需要定义“最佳”。COM是一个非常异构的平台,尽管它的设计者们都希望如此

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

我不会将BSTR用于非字符串用途——它可能会节省您一纳秒的时间,但最终会在您需要扩展或移植代码时出现问题。我只会使用索引为0、2、4的安全变量数组。。。以及1、3、5、…处的相应值,您可以为键值对引入一个接口,并为这些对的集合引入另一个接口。

您需要定义“最佳”。COM是一个非常异构的平台,尽管它的设计者们都希望如此。您期望和对象交互的客户机的性质(也称为什么语言?)应该会严重影响您的选择

举两个简单的例子:

  • 正在从分类ASP调用?
    您唯一的工具是变体。好的——您正在使用ATL:您唯一的工具是BSTR或变体的安全阵列

  • <> >从C++调用? 您可以使用自定义数据数组(在[size_is]上读取)。如果可能的话,甚至是固定大小的阵列。两边都容易

还有其他考虑因素:

你在给客户写信吗?然后你想让双方的事情都变得容易些

你只写对象吗?然后,您可能希望在客户端使事情变得简单,即使它在服务器上是最难的(为什么?因为您希望另一方乐于与您合作,特别是在咨询或商业环境中——不要显得懒惰!)

还有,这是一次性物品吗?或者它将来会在很多情况下使用?在前一种情况下,你可能会发现这其实并不重要。在后一种情况下,你需要仔细思考


如果您发布更多关于您的情况的详细信息,我们可能会提供更具体的指导。

请考虑
IPersistPropertyBag
,了解执行此操作的标准方法

考虑一个OLE属性集对象

如果您正在创建快速而肮脏的内容,请考虑接受
Scripting.Dictionary
对象或
ADODB.Record