我在C++(MFC)应用程序中使用了嵌入式IE ActiveX控件。嵌入式IE具有一个JavaScript方法,该方法使用以下(简化的)JavaScript将数据传递回我的C++应用程序:

function passDataTocpp()

{
    return {key1: 134, key2:'value2'};

}

当我用C++代码收到它时,我得到一个VT_DISPATCH类型的VARIANT。我能够找到this example,它将数组转换为C++可访问的数据,但似乎不适用于关联数组(或对象)。

任何想法如何访问该数据?

最佳答案

IDispatch::GetIdsOfNamesIDispatch::Invoke(DISPID_PROPGET)。如果您甚至不知道对象具有哪些属性,请查询IDispatchEx并使用GetNextDispID枚举它们。

由于您使用的是ATL,因此CComDispatchDriverIDispatch(但不是IDispatchEx的便捷包装),您必须直接调用它。由于某些原因,它没有在MSDN中记录。在atlcomcli.h中查找CComPtr<IDispatch>特化,这相当简单。 CComDispatchDriver是它的typedef。

09-18 15:40