首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展Windows结构安全吗?

扩展Windows结构安全吗?
EN

Stack Overflow用户
提问于 2015-05-13 03:02:41
回答 1查看 115关注 0票数 2

我了解到,在严格模式下,Windows句柄(如HBRUSH )被定义为一种结构,以避免愚蠢的错误,我想知道这样做是否安全:

代码语言:javascript
复制
class WINBRUSH : public HBRUSH

现在我不太精通C++,但这似乎是一个非常糟糕的主意。我当时想的是,因为Windows分配这些对象,如果我不向类添加任何内容,我应该会很好。一个例子是:

代码语言:javascript
复制
class WINBRUSH : public HBRUSH__
{
 public:
    void GetRGB(BYTE* RgbArray)
    {
      LOGBRUSH LogBrush;
      GetObject(this,sizeof(LOGBRUSH),&LogBrush);
      RgbArray[0] = GetRValue(LogBrush.lbColor);
      RgbArray[1] = GetGValue(LogBrush.lbColor);
      RgbArray[2] = GetBValue(LogBrush.lbColor);
    }
};

现在,我已经测试了上面的类,并检查了是否从GetRGB方法中得到了正确的值,并且它是有效的,但是我只是想要一些关于这个方法的输入。提前谢谢达蒙。

测试代码:

代码语言:javascript
复制
WINBRUSH* Brush = (WINBRUSH*)CreateSolidBrush(RGB(1,2,3));

BYTE Rgb[3];
Brush->GetRGB(Rgb);

if((Rgb[0] == 1) && (Rgb[1] == 2) && (Rgb[2] == 3))
{
    MessageBox(NULL, L"RGB values are correct!", L"Success!", MB_OK);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-13 03:15:47

它应该是安全的;它与如果您有:

代码语言:javascript
复制
struct X
{
    HBRUSH abc;
    GetRGB(/* ... */) {}
}

尽管如此,IMHO这是棘手的,为了棘手,一个非成员函数void GetRGB(HBRUSH h, BYTE* result)将更清楚和更抵抗破坏的未来版本的SDK。a.GetRGB(b)并不比GetRGB(a, b)更清晰。

如果您确实决定这样做,请确保添加了一个static_assert,以便在以后有人尝试添加一个成员变量或它无法编译的内容时)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30204922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档