我有下面的代碼段,其中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