在c ++中批量“设置”COM对象属性

时间:2011-03-08 16:10:11

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

我必须设置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");

1 个答案:

答案 0 :(得分:0)

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

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

  1. 通常,VB使用IDispatch接口来访问COM组件。从C ++开始,可能存在一个本地接口,它可能比IDispatch接口更容易访问。从com_object中,您可以查询此c ++接口。

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

  3. 不要从LPCSTR到_bstr_t进行类型转换。两种字符串表示具有不同的含义。始终使用正确的转换功能进行转换。

  4. 希望这有帮助。