用javascript调用atl编写的com组件,out型的variant如何返回不了字符串呢
用javascript调用atl编写的com组件,out型的variant怎么返回不了字符串呢?
在idl文件里面是如下定义:
[id(3), helpstring( "method test4 ")] HRESULT test4([out] VARIANT* pStr);
在cpp文件里面如下定义:
STDMETHODIMP Cobjctrl::test4(VARIANT *pStr)
{
// TODO: Add your implementation code here
pStr-> vt=VT_BSTR;
pStr-> bstrVal=SysAllocString(L "在那遥远的地方 ");
return S_OK;
}
在jsp文件如下调用:
var abc = new ActiveXObject( "Test2.objctrl.1 ");
var fdsfsd = "123 ";
iPort = abc .test4(fdsfsd);
alert(fdsfsd);
却发现fdsfsd变量仍然是123?但在组件的test4里面是可以获取到fdsfsd 变量的值的。
已经尝试过BSTR,也不行。小弟是菜鸟,望各位大侠指导。
------解决方案--------------------
com实现代码
STDMETHODIMP CTest::TestBStr(BSTR *pStr)
{
CComBSTR temp = *pStr;
if(temp == "OK ")
{
*pStr = CComBSTR( "FALSE ");
}else
{
*pStr = CComBSTR( "Fool ");
}
// TODO: Add your implementation code here
return S_OK;
}
在idl文件里面是如下定义:
[id(3), helpstring( "method test4 ")] HRESULT test4([out] VARIANT* pStr);
在cpp文件里面如下定义:
STDMETHODIMP Cobjctrl::test4(VARIANT *pStr)
{
// TODO: Add your implementation code here
pStr-> vt=VT_BSTR;
pStr-> bstrVal=SysAllocString(L "在那遥远的地方 ");
return S_OK;
}
在jsp文件如下调用:
var abc = new ActiveXObject( "Test2.objctrl.1 ");
var fdsfsd = "123 ";
iPort = abc .test4(fdsfsd);
alert(fdsfsd);
却发现fdsfsd变量仍然是123?但在组件的test4里面是可以获取到fdsfsd 变量的值的。
已经尝试过BSTR,也不行。小弟是菜鸟,望各位大侠指导。
------解决方案--------------------
com实现代码
STDMETHODIMP CTest::TestBStr(BSTR *pStr)
{
CComBSTR temp = *pStr;
if(temp == "OK ")
{
*pStr = CComBSTR( "FALSE ");
}else
{
*pStr = CComBSTR( "Fool ");
}
// TODO: Add your implementation code here
return S_OK;
}