加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读