我想将C ++中的结构传递给javascript函数。我可以将VARIANT变量传递给javascript,但我不知道如何将结构转换为VARIANT。
例如,我可以将转换为VARIANT的字符串传递给function f
:
void f(VARIANT x);
f(_variant_t("hello!"));
现在我想传递一个这样的结构:
struct TMyStruct
{
int x;
int y;
};
-------我的部分代码如下:
// Load Html on CHtmlView and after load is completed, get its document.
LPDISPATCH pDoc = ... // document of CHtmlView
CComQIPtr<IHTMLDocument2> m_pViewDoc;
pDoc->QueryInterface(IID_IHTMLDocument2, (void**)&m_pViewDoc);
CComPtr<IDispatch> m_pScript;
m_pViewDoc->get_Script(&m_pScript);
struct TMyStruct
{
int x;
int y;
// .... other fields...
} z;
//z = .... Initialize z.
VARIANT myVariant;
// myVariant = z ???? // How to pass z to variant.
DISPID dispid = NULL;
HRESULT hr = m_pScript->GetIDsOfNames(IID_NULL, &CComBSTR(myJavaScriptFunctionName), 1, LOCALE_SYSTEM_DEFAULT, &dispid);
ATLASSERT(SUCCEEDED(hr));
if(SUCCEEDED(hr))
{
COleDispatchDriver ocOleDispatchDriver(pScript, FALSE);
ocOleDispatchDriver.InvokeHelperV(dispid, DISPATCH_METHOD, VT_NONE, nullptr, (BYTE*)VTS_VARIANT, myVariant);
}
答案 0 :(得分:2)
此页面似乎表示您无法执行您要执行的操作。
重要提示:脚本客户端无法使用结构!
参考:http://vcfaq.mvps.org/com/4.htm
在我看来,你已经进入了COM的世界,你仍然不确定这一切是如何运作的。从根本上说,COM需要知道你传递的类型,因为它强制执行和管理COM公寓之间的过渡。当跨越公寓边界时,COM子系统将做一些魔术以确保遵循COM规则并且不会发生任何(太)坏事。除非有某处可用的界面或类型的描述,否则它无法做到这一点。因此,当从一个C ++类向另一个C ++类传递结构时,您有一些选项可以促进这一点,但在尝试将数据传递给脚本客户端时,您可能没有那种控制级别。