Unicode控件的字串参数问题

王朝other·作者佚名  2006-03-30
窄屏简体版  字體: |||超大  

写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),而去除了可能为

空指针的情况。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航