首页 > 开发 > 综合 > 正文

Unicode控件的字串参数问题

2024-07-21 02:29:22
字体:
来源:转载
供稿:网友

写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),而去除了可能为空指针的情况。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表