我必须设置 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++ 库我无法从您的代码片段中获取此信息。
根据一些基本假设,这里有一些需要考虑的要点。
通常 VB 使用 IDispatch 接口(interface)访问 COM 组件。在 C++ 中可能有一个 native 接口(interface),它可能比 IDispatch 接口(interface)更容易访问。您可以从 com_object 查询此 c++ 接口(interface)。
始终使用 COM 字符串(分配了 BSTR、SysAllocString)来传递字符串信息。
不要从 LPCSTR 类型转换为 _bstr_t。两种字符串表示都有不同的含义。始终使用适当的转换函数进行转换。
希望这对您有所帮助。
关于c++ - "Set"C++中批量COM对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5235071/