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

最佳答案

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

基于一些基本假设,这里需要考虑一些要点。


通常,VB使用IDispatch接口访问COM组件。在C ++中,可能存在一个本机接口,它比IDispatch接口更容易访问。您可以从com_object查询此c ++接口。
始终使用COM字符串(分配了BSTR,SysAllocString)来传递字符串信息。
不要从LPCSTR转换为_bstr_t。两种字符串表示形式都有不同的含义。始终使用正确的转换函数进行转换。


希望这可以帮助。

08-05 07:16
查看更多