在做asp组件时,遇到了一个令人困惑的问题。我有个函数,里面是把一些字符串进行转换,asp中调用该函数,输入字符串后返回处理后的字符串,就是这么一个函数,在application中调试得很正常,但是在asp组件中调用居然有些错误有些正确。在刚刚试验完可以调试asp组件后,通过跟踪,发现了一些很奇怪的问题,在函数里面所有过程得到的值都正确,但是到返回给asp后就有某些字符串被截断了!组件中的函数输入是bstr类型,输出是OleVariant *。后来我干脆用了个中间量tmpvalue,函数结尾先输出tmpvalue,再令result:=tmpvalue,然后再输出tmpvalue, 这时奇迹出现了,输出的结果中result的值居然在尾部有几个字符发生了变化。(为了看得清楚点,我把字符转成16进制数显出出来了)
[code]
DBGPrint('tmpvalue:'+strtohexstr(tmpvalue));
result:=tmpValue;
DBGPrint('result value:'+strtohexstr(result));
[/code]
结果是:
tmpvalue:758BC6413F4ED3220ED0D52BAF3EF222
result value:758BC6413F4E3F0ED0D52B3F3F
我倒,看来是OleVariant 在字符串赋值时自动给我做了手脚了,害我调试找原因找了N久!
现在的解决办法看来可能可以是把结果以二进制的buf返回又或者返回十六进制字符给asp,然后asp中再把十六进制转回字符串。想尝试用别的类型来做,但是试了几个都不成功。:(