我有下面的代码段,其中m_edit
是一个CEdit控制:的CEdit ::函数getline()的Windows 7
TCHAR lpsz[MAX_PATH+1];
// get the edit box text
m_edit.GetLine(0,lpsz, MAX_PATH);
这工作完全运行Windows XP和更早版本的计算机上。我没有在Vista中测试过,但在Windows 7上,lpsz获取插入到其中的垃圾unicode字符(以及有时候的实际文本)。关于这里发生了什么的任何想法?
这里存在轻微的风险。如果另一个线程可能会在查询长度和实际查询之间更改编辑控件的窗口文本以获取该行。最好使用GetLine的返回值来确保您必须确定您刚刚复制的文本的实际长度。 (不可否认,在大多数GUI代码中这是非常罕见的。) – 2011-05-18 23:47:13
@Adrian:或许,但我认为这只是一个“错误”,而不是“非常罕见”。你*希望*应用程序在这种情况下失败,所以你知道你无意中从一个单独的线程访问UI控件。 – 2011-05-19 03:47:36
如果你的设计说控件应该只能从一个特定的线程访问,那么,是的,这将是一个错误。并非所有的GUI代码都是这样设计的。 GetWindowText(它是CEdit :: GetLine的基础)专门设计用于处理从另一个线程或甚至另一个进程中获取文本。 – 2011-05-19 21:02:48