Skip to content

Commit

Permalink
エラーチェックを修正
Browse files Browse the repository at this point in the history
  • Loading branch information
m-tmatma committed Feb 2, 2019
1 parent ddff072 commit baaf30b
Showing 1 changed file with 36 additions and 10 deletions.
46 changes: 36 additions & 10 deletions sakura_core/apiwrap/StdControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,10 @@ namespace ApiWrap{
@brief Window テキストを取得する
@param[in] hwnd ウィンドウハンドル
@param[out] str ウィンドウテキスト
@return 文字数 (NULL文字含む)
@return 成功した場合 true
@return 失敗した場合 false
*/
inline int Wnd_GetText(HWND hwnd, CNativeT& str)
inline bool Wnd_GetText(HWND hwnd, CNativeT& str)
{
// バッファをクリアしておく
str.Clear();
Expand All @@ -86,6 +87,13 @@ namespace ApiWrap{
// 条件によっては必要なサイズより大きな値を返すことがある模様
// https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getwindowtextlengtha
const int length = ::GetWindowTextLength(hwnd);
if (length < 0)
{
// ドキュメントには失敗した場合、あるいはテキストが空の場合には 0 を返すとある。
// 0 の場合はエラーかどうか判断できないのでテキストの取得処理を続行する。
// 仕様上は負の場合はありえないが、念の為エラーチェックしておく。
return false;
}

// ドキュメントには NULL 文字に関して言及がないので念の為 +1 しておく
const int bufsize = length + 1;
Expand All @@ -97,18 +105,36 @@ namespace ApiWrap{
}

int actualCount = ::GetWindowText(hwnd, str.GetStringPtr(), str.capacity());
if (actualCount > 0)
if (actualCount < 0)
{
// 仕様上は負の場合はありえないが、念の為エラーチェックしておく。
return false;
}
else if (actualCount == 0)
{
// GetWindowText はエラーの場合、またはテキストが空の場合は 0 を返す
if (GetLastError() != 0)
{
return false;
}
}
else if(actualCount < str.capacity())
{
assert(actualCount <= bufsize);
}
else
{
// 仕様上はありえないはず
return false;
}

// Win32 API の GetWindowText() を呼んだだけでは CNativeT 内部の
// データサイズが更新されないのでデータサイズを反映する
str._SetStringLength(actualCount);
// Win32 API の GetWindowText() を呼んだだけでは CNativeT 内部の
// データサイズが更新されないのでデータサイズを反映する
str._SetStringLength(actualCount);

// 正しく設定されているはず
assert(str.GetStringLength() == actualCount);
}
return actualCount;
// 正しく設定されているはず
assert(str.GetStringLength() == actualCount);
return true;
}

// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
Expand Down

0 comments on commit baaf30b

Please sign in to comment.