写unicode控件时发现的传字串参数的问题:
问题描述:
unicode的ocx,属性参数text,类型:bstr。
控件的源码(vc中)
afx_msg void settext(lpctstr lpsztext)
vb调用1:
dim strtest as string
strtest = text1.text ‘text1文本框为空
if not isnull(strtest) then
testocx2221.stringtest = strtest
end if
结果:
settext中lpsztext是null。
vb调用2:
dim strtest as string
strtest = ""
if not isnull(strtest) then
testocx2221.stringtest = strtest
end if
结果:
settext中lpsztext不为null,得到指向空串的有效指针。
因此:
上述调用1时:
当控件的处理程序直接调用了cstring的 == 或 !=,那就有问题了,因为cstring这两个操作符不支持null,会出错。也就是调用了不支空指针的操作。
好吧,还是采用保险的做法吧: 加多一句:
if(lpsztext==null) lpsztext = _t("");
很奇怪:
不知道vb的两种调用为啥会传出不同的值。没明白。
至于为什么ansi不会有问题,可能是因为vb调用ansi的控件时,需要对字串进行内部的转换(由unicode转ansi),而去除了可能为空指针的情况。
新闻热点
疑难解答