我必须设置一个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。两种字符串表示形式都有不同的含义。始终使用正确的转换函数进行转换。
希望这可以帮助。