atl com问题,同一服务器,vbs脚本文件和asp中的vbs运行结果不同

swolf520 2009-07-07 03:17:17
我用vc6做了个atl com,包装了md5加密函数。
STDMETHODIMP CCrypter::Md5(VARIANT souce, VARIANT *pVal)
{
::VariantInit( pVal ); // 永远初始化返回值是个好习惯
char* strsouce = _com_util::ConvertBSTRToString(souce.bstrVal);
char* md5=new char[16];
char* des= new char[33];
memset(md5,0,16);
memset(des,0,33);
Md5Char((u_char*)md5,(u_char*)strsouce,strlen(strsouce));
StringToHex(md5,16,des);

pVal->vt = VT_BSTR;
pVal->bstrVal =CComBSTR(_com_util::ConvertStringToBSTR(des)).Copy();
delete strsouce;
delete md5;
delete des;
return S_OK;
}
在同一服务器上,用test.vbs脚本文件测试,得到正确结果。
dim cr
set cr=CreateObject("ScriptTool.Crypter") 'ADODB.Recordset
msgbox cr.Md5("abcd")
在test.asp中调用,得出错误结果。
<%
dim cr
set cr=Server.CreateObject("ScriptTool.Crypter")
s="abcd"
response.write "begin<br>"
response.write s
response.write "<br>"
response.write cr.Md5(s)
response.write "<br>end"
set cr=nothing
%>
如果直接
response.write cr.Md5("abcd"),得到正确结果。
应该是内存被垃圾覆盖的原因。怎么处理?
...全文
73 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengrx 2009-07-07
  • 打赏
  • 举报
回复
pbstrVal表示BSTR的指针,*取值。
swolf520 2009-07-07
  • 打赏
  • 举报
回复
自己解决了
char* strsouce = _com_util::ConvertBSTRToString(souce.bstrVal);
改为
char* strsouce =_com_util::ConvertBSTRToString(*(souce.pbstrVal)) ;

多看内存状态是好习惯。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧