c++ - "Set"C++中批量COM对象属性

标签 c++ visual-c++ com

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

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

我有很多属性要设置,但我不知道如何在 C++ 中设置。在 VB.Net 中它看起来像这样: com_object.Set "姓名,年龄", 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 接口(interface)。

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

最佳答案

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

根据一些基本假设,这里有一些需要考虑的要点。

  1. 通常 VB 使用 IDispatch 接口(interface)访问 COM 组件。在 C++ 中可能有一个 native 接口(interface),它可能比 IDispatch 接口(interface)更容易访问。您可以从 com_object 查询此 c++ 接口(interface)。

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

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

希望这对您有所帮助。

关于c++ - "Set"C++中批量COM对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5235071/

相关文章:

c++ - 奇怪的 C++ 语法 : type definition before a function call

c++ - 理解字节顺序——一个变量值

c++ - Visual Studio 2015 不会抑制错误 C4996

java - JACOB - 对 COM 接口(interface)的远程调度调用

com - 如何从 ATL activex 控件向 VB6 返回错误字符串和错误代码?

c++ - 即使在使用守卫后也不能使用在另一个类中定义的结构

c++ - 读取 USB 摄像头的输入编辑并将输出发送到 Windows 上的虚拟摄像头

c++ - MSVC 相当于 __attribute__ ((warn_unused_result))?

c++ - 为什么我总是必须除以 49 才能得到二进制转换器 + cout 歧义的正确答案?

java - 使用 JButton 的无锁循环