«Установить» свойства COM-объекта в пакетном режиме в C ++ - PullRequest
1 голос
/ 08 марта 2011

Мне нужно установить свойства 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* может быть любым, но он определен в файле .tlh API, который мне предоставляется, и он наследуется от интерфейса IDispatch.

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

1 Ответ

0 голосов
/ 17 марта 2011

Что вы используете для доступа к компоненту COM MFC или ATL или только к библиотеке c ++, такой как _bsrt_t? Я не могу получить эту информацию из вашего фрагмента кода.

С некоторыми базовыми предположениями здесь необходимо учитывать некоторые моменты.*

  1. Обычно VB использует интерфейс IDispatch для доступа к компонентам COM.В C ++ может быть встроенный интерфейс, доступ к которому может быть намного проще, чем в интерфейсе IDispatch.Из com_object вы можете запросить этот интерфейс c ++.

  2. Всегда использовать строки COM (BSTR, SysAllocString распределены) для передачи строковой информации через.* Не печатайте с LPCSTR на _bstr_t.Обе строковые представления имеют разные значения.Всегда используйте надлежащие функции преобразования для выполнения преобразований.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...