gpt4 book ai didi

javascript - 将对象从 Javascript 传递到 C++

转载 作者:太空狗 更新时间:2023-10-29 23:09:14 24 4
gpt4 key购买 nike

我找到了 Passing an array from Javascript to C++解决方案,但我还有另一个任务:将 一个对象 从 Javascript 传递到 C++(如果我将 IWebBrowser2 与 IDispatch 一起使用)

我的意思是我需要通过带有 JavaScript 对象参数的 window.external.method 调用 C++ 方法

var obj = {name: "Petr", group: "Friend"};
window.external.myMethod(obj);

如何获取对象成员“name”、“group”等的访问权限?

最佳答案

您可以通过 IDispatch 访问对象的属性接口(interface)及其方法GetIDsOfNamesInvoke .

根据您对 myMethod 的定义,您应该以 VARIANT 形式接收 obj或 C++ 代码中的 IDispatch *。如果 VARIANTvt 应该是 VT_DISPACTH,在这种情况下,您可以安全地取消引用 pdispval

有了IDispatch 指针后,您可以使用GetIDsOfNames 获取DISPID对于您感兴趣的属性:

_bstr_t sPropertyName = L"myProperty";
DISPID dispid = 0;
HRESULT hr = pDispatch->GetIDsOfNames(IID_NULL, &sPropertyName, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if(SUCCEEDED(hr))
{
...

一旦您成功收到您的DISPID,您必须根据您是想获取一个值、设置一个值还是调用一个方法来调用不同的Invoke

例如,获取一个值:

    VARIANT vValue;
hr = pDispatch->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, 0, &vValue, 0, 0);
if(SUCCEEDED(hr))
{
...

有关调用时不同排列的更多信息,请参阅Invoke 的文档。

关于javascript - 将对象从 Javascript 传递到 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6033201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com