gpt4 book ai didi

c++ - 将 HWND 传递给方法并存储在类中

转载 作者:行者123 更新时间:2023-11-30 03:52:23 24 4
gpt4 key购买 nike

我正在调用以下内容:

// hMainWindow is a correctly functioning window handle
app.GetMainWindowInfo().SetHndToWindow( hMainWindow );

这是我的类(class):

class App : public BaseClass
{
public:

WindowInfo& GetMainWindowInfo();
void SetMainWindowInfo( unique_ptr<WindowInfo> windowInfo );

private:

WindowInfo mainWindowInfo;

};

class WindowInfo
{
public:

HWND& GetHndToWindow() const;
//void SetHndToWindow( HWND hndToWindow );

// implementation on cpp file included here simply for example

void WindowInfo::SetHndToWindow( HWND hndToWindow )
{
this->hndToWindow = hndToWindow;
}

private:

HWND hndToWindow; // Only for Windows OS

};

现在,当我尝试使用 Getter 方法 GetHndToWindow 时,我得到了一个无法读取内存的未使用的返回。

我有什么地方可能出错的想法吗?

enter image description here

继续上述问题,例如在应用程序类中,如果我在这一行检查调试器:

enter image description here

我的 graphicContext 类如下所示:

class IGraphicContext
{
// Methods
public:

virtual void Initialize() = 0;

private:

// Properties

public:

const WindowInfo& GetWindowInfo() const
{
return this->windowInfo;
}

void SetWindowInfo( WindowInfo& windowInfo )
{
this->windowInfo = windowInfo;
}

protected:

WindowInfo windowInfo;

};

class DXGraphicContext : public IGraphicContext, public BaseClass
{
// Methods
public:

DXGraphicContext();
~DXGraphicContext();

virtual void Initialize() override;
...

最佳答案

您的 IGraphicContext::SetWindowInfo 方法生成传入的 WindowInfo拷贝。如果稍后修改原件(例如,通过调用 SetHndToWindow),这不会影响 IGraphicContext 保存的拷贝。

如果你真的想在两个独立的类之间共享这样的结构,你应该考虑将它保存在 std::shared_ptr 中。

关于c++ - 将 HWND 传递给方法并存储在类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30721504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com