【问题标题】:Is there any way to make the DialogProc work without declaring as Nonstatic有什么方法可以在不声明为非静态的情况下使 Dialog Proc 工作
【发布时间】:2013-07-23 06:52:37
【问题描述】:

我已经使用 createDialogParam 和 DialogProc 开发了任何按钮应用程序。首先,我将 DialoProc 方法声明为静态,以使每件事都正常工作并且它工作但现在的情况是有太多变量(未全局声明)和函数,我必须在 DialogProc 函数中使用,现在我想做它是非静态的,因为将其设为静态使我不再实现更多的东西。

如果我不声明它是静态的,它会给出错误

    m_hwndPreview = CreateDialogParam( g_hInst,MAKEINTRESOURCE(IDD_MAINDIALOG), m_hwndParent,(DLGPROC)DialogProc, (LPARAM)this);  //('type cast' cannot convert from 'overloaded-function' 
//to 'DLGPROC')

是否有任何解决方案可以使 dialogProc 函数而不将其声明为静态?

【问题讨论】:

    标签: winapi button dialog static-methods static-members


    【解决方案1】:

    它必须是静态函数,因为 Windows 从 C 代码而不是 C++ 代码调用它。但是有几种方法可以让您的静态函数检索您保存在某处的“this”指针,然后使用该指针调用类成员函数。每个适用于 Windows 的 GUI 库都可以解决这个问题:考虑使用一个。

    【讨论】:

    • 实际上我也在做同样的事情,但我在调试 prevhost.exe 中 0x000007fef535203c (AMEShellExtPreviewHandlerFinal.dll) 处的未处理异常时遇到问题:0xC0000005:访问冲突读取位置 0x0000000000000030。有关更多信息,您可以在此链接上查看此问题-stackoverflow.com/questions/17789402/…
    • 实际上我必须在 DialogPros 中访问的是流(通过单击预览处理程序文件创建,以便将其内容存储在缓冲区中,我无法访问 DialogProc 中的流变量 m_pStream)。 .. 我正在这样做 -AMEPreviewHandler* instance = (AMEPreviewHandler*)lParam;实例->m_pStream;
    猜你喜欢
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多