Why pass array from CDhtmlDialog to javascript fail
Dear All
I have used a CDhtmlDialog to show html page, currently, I will call
window.external function in javascript. and return some data back to
javascript. however, It will fail.
code snippet is below
VARIANT CMyHtmlDlgDlg::GetSrInfo()
{
HRESULT hr = E_FAIL;
VARIANT stVar;
CComSafeArray<VARIANT> m_oArrSrInfo;
::VariantInit(&stVar);
V_VT(&stVar) = VT_EMPTY;
m_oArrSrInfo.Add(CComVariant(1));
m_oArrSrInfo.Add(CComVariant(2));
m_oArrSrInfo.Add(CComVariant(3));
V_VT(&stVar) = VT_ARRAY | VT_VARIANT;
V_ARRAY(&stVar) = m_oArrSrInfo;
return stVar;
}
javascript:
function UpdateInfo() {
alert('Before GetSrInfo');
var objArrayInfo = new VBArray(window.external.GetSrInfo()); //Line 1
alert('After GetSrInfo');
}
when call UpdateInfo(), Line 1 will pop javascript error : invalid procedure
call or argument.
and I have return a uint or BSTR, The javascript will work, only when return
a array, It will fail, Please give me some suggestion. Thanks!
---------------------------------------------------------------------------------------
I have call SetExternalDispatch(GetIDispatch(TRUE));
CMyDHTMLDialog::OnInitDialog, and call EnableAutomation in constructor
function. I wanna know what other should I do for CDHtmlDialog.
By the way, As I have described in first post, I have used the same way to
return a string,
//C++ code
VARIANT CMyHtmlDlgDlg::GetString()
{
VARIANT varStr;
BSTR bstr;
bstr = SysAllocString(L"hello");
::VariantInit(&varStr);
V_VT(&varStr) = VT_BSTR;
V_BSTR(&varStr) = bstr;
SysFreeString(bstr);
return varStr;
}
//Javascript code
function GetMsg() {
var strMsg = window.external.GetString();
document.getElementById("MsgBtn").value = strMsg;
}
For this function, Javascript can return correct value, It only has problem
when I return a Array, Thanks!!
--
Rejoice,I Desire!