描述:
ATL工程建的dll
接口函数如下:
ShowViewByKey(BSTR keyText, BSTR *viewText)
keyText为输入参数,想让*viewText保存变换后的内容
在源程序中用MessageBox调试,可以看到正确的结果*viewText
在页面中调用该接口函数,直接alert该值,却总是空!!!
这是怎么回事呀??谁给指点一下……
解决方案1:
问题还没解决:(
改成这样应该可以:
STDMETHODIMP CXMLSelect::ShowViewtextByKey(BSTR keyText, BSTR *viewText)
{
CComBSTR assist;
assist=this->m_ViewText[i];
*viewText = assist.Detach();
}
这样写是会造成内存泄漏的:
viewText = (BSTR *)CoTaskMemAlloc(G_INT_VIEWMAX);
*viewText = assist.Copy();
assist.Detach();
我不太懂脚本语言
但脚本语言多数都按值传递,
指针肯定是没有的
引用有吗???
如下定义接口:
YouFunc([in]BSTR inStr,[out,retval]BSTR* outStr);//在.idl文件中
然后
viewText=id.ShowViewtextByKey(editsetKeyText.value);
alert(ViewText);
应该可以
应该将ATL的接口申明为:YouFunc([in]BSTR inStr,[out retval]BSTR* outStr);
viewText = (BSTR *)CoTaskMemAlloc(G_INT_VIEWMAX);
*viewText = assist.Copy();
assist.Detach();
BSTR绝对不能使用CoTaskMemAlloc来分配内存,你可以直接将上面的这几句代码改为
*viewText = assst.Detach();
如果还不行,给我你的邮箱,我给你写一个简单的例子程序