我在C++(MFC)应用程序中使用了嵌入式IE ActiveX控件。嵌入式IE具有一个JavaScript方法,该方法使用以下(简化的)JavaScript将数据传递回我的C++应用程序:
function passDataTocpp()
{
return {key1: 134, key2:'value2'};
}
当我用C++代码收到它时,我得到一个VT_DISPATCH类型的VARIANT。我能够找到this example,它将数组转换为C++可访问的数据,但似乎不适用于关联数组(或对象)。
任何想法如何访问该数据?
最佳答案
IDispatch::GetIdsOfNames
,IDispatch::Invoke(DISPID_PROPGET)
。如果您甚至不知道对象具有哪些属性,请查询IDispatchEx
并使用GetNextDispID
枚举它们。
由于您使用的是ATL,因此CComDispatchDriver
是IDispatch
(但不是IDispatchEx
的便捷包装),您必须直接调用它。由于某些原因,它没有在MSDN中记录。在atlcomcli.h中查找CComPtr<IDispatch>
特化,这相当简单。 CComDispatchDriver
是它的typedef。