c – 函数返回std :: wstring = NULL;
发布时间:2020-12-16 10:29:15 所属栏目:百科 来源:网络整理
导读:我试图为winapi函数GetWindowText创建包装器. 函数返回std :: wstring,但我不知道如何处理错误发生的地方.我返回NULL但我知道这是错的. std::wstring GetWindowText(HWND handle){ const int size = 1024; TCHAR wnd_text[size] = {0}; HRESULT hr = ::GetWi
我试图为winapi函数GetWindowText创建包装器.
函数返回std :: wstring,但我不知道如何处理错误发生的地方.我返回NULL但我知道这是错的. std::wstring GetWindowText(HWND handle) { const int size = 1024; TCHAR wnd_text[size] = {0}; HRESULT hr = ::GetWindowText(handle,wnd_text,size); if(SUCCEEDED(hr)) return std::wstring(wnd_text); else return NULL; } 解决方法
作为异常的替代,您还可以在参数列表中通过引用返回字符串,并通过返回true或false来指示成功,即
bool GetWindowText(HWND handle,std::wstring& windowText) { const int size = 1024; TCHAR wnd_text[size] = {0}; HRESULT hr = ::GetWindowText(handle,size); if(SUCCEEDED(hr)) { windowText = wnd_text; return true; } else return false; } 避免引用参数的另一个替代方法是返回包装值的类的实例,但也让您知道是否存在值,例如 class ValueWrapper { public: ValueWrapper() : present( false ) {} ValueWrapper( const std::wstring& s ) : value( s ),present( true ) {} bool isPresent() const { return present; } const std::wstring& getValue() const { return value; } private: std::wstring value; bool present; }; 请注意,您可以非常轻松地模拟此包装器.那么你的功能就是 ValueWrapper GetWindowText(HWND handle) { const int size = 1024; TCHAR wnd_text[size] = {0}; HRESULT hr = ::GetWindowText(handle,size); if(SUCCEEDED(hr)) return ValueWrapper( wnd_text ); else return ValueWrapper(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |