我用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"),得到正确结果。
应该是内存被垃圾覆盖的原因。怎么处理?