【问题标题】:"Set" COM object properties in batch in c++在 C++ 中批量“设置”COM 对象属性
【发布时间】:2011-03-08 16:10:10
【问题描述】:

我必须设置 COM 对象的属性。

COM 对象有一个Set 函数,它接受一个键(字符串)和一个值(变量)作为参数。例如我可以这样做:com_object->Set("name", "John").

我有很多属性要设置,但我不知道如何在 C++ 中进行设置。在 VB.Net 中它看起来像这样: com_object.Set "name,age", Array("M2", 1)

我想在 C++ 中做同样的事情,但我不知道语法。

编辑

这是我编写的用于批量访问属性的代码:

  template < class ComObjectType >
  void read(ComObjectType com_object, std::string const& fields)
  {
    COleSafeArray data_array_;
    data_array_ = com_object->GetGet((LPCSTR)fields.c_str());
    long index = 0;
    VARIANT value_temp_;
    _variant_t value_reader_;
    data_array_.GetElement(&index, &value_temp_);
    value_reader_.Attach(value_temp_);
    std::string str1 = (LPCSTR)((_bstr_t) value_reader_)
    ++index
    data_array_.GetElement(&index, &value_temp_);
    value_reader_.Attach(value_temp_);
    long long1 = value_reader_.lVal;

  }

然后我调用这个函数(它实际上并没有做太多,只是用于演示。IAPIOrderObj* 可以是任何东西,但它是在我提供的 API 的 .tlh 文件中定义的,它继承来自 IDispatch 接口。

MYAPI::IAPIOrderObj* my_obj;
read< IAPIOrderObj* >(my_obj, "StatusString,StatusCode");

【问题讨论】:

  • 你使用 VS2010 吗? com_object 的定义如何?

标签: c++ visual-c++ com


【解决方案1】:

您使用什么来访问 COM 组件 MFC 或 ATL 或仅像 _bsrt_t 这样的 c++ 库我无法从您的代码 sn-p 中获取此信息。

这里有一些基本假设是需要考虑的。

  1. 通常 VB 使用 IDispatch 接口来访问 COM 组件。在 C++ 中,可能有一个本机接口,它可能比 IDispatch 接口更容易访问。从 com_object 你可以查询这个 c++ 接口。

  2. 始终使用 COM 字符串(BSTR、分配的 SysAllocString)来传递字符串信息。

  3. 不要从 LPCSTR 类型转换为 _bstr_t。两种字符串表示都有不同的含义。始终使用适当的转换函数进行转换。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 2023-03-10
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2011-05-28
    • 2016-04-02
    相关资源
    最近更新 更多