MFC,无对话框类.cpp文件,如何获取主.cpp公共变量

时间:2014-03-14 08:04:42

标签: mfc dialog base

在项目中,我创建了main.cpp和main.h,并在.cpp文件中定义了公共变量int a和int b。

目前我在aproc.cpp和aproc.h中创建了一个类Aproc(它是无对话框),并使用include aproc.h添加到main.cpp中。

现在,在aproc.cpp中我想得到main.h中定义的变量“a”,我正在使用这段代码:

((MainDlg*)GetParent())->a;

编译器运行良好, 但它会在GetParent中运行时错误,

变量声明为

public:
    int a;

aproc.h被视为

class aproc.h : pulbic CWnd
{

}

如何获取公共变量?

2 个答案:

答案 0 :(得分:0)

您还没有告诉我们aproc窗口是否是main的子窗口,以及是否已创建aproc窗口,以及您获得的运行时错误。要避免这些可能的问题,可以使用全局MFC函数AfxGetMainWnd()。

((CMainDlg*)AfxGetMainWnd())->a

答案 1 :(得分:0)

如果你的程序在((MainDlg*)GetParent())->a;崩溃,很可能意味着GetParent()返回NULL,表示失败。在使用GetParent()的结果之前检查返回值。

MainDlg *p = (MainDlg *)GetParent();
if(p == NULL) {
    int err = GetLastError(); // <--- inspect this return value, it'll tell you why it failed
}

GetParent()通常由于以下原因之一而失败:

  • 尚未通过直接或间接调用Create()
  • 创建窗口
  • 该窗口是一个无主或没有WS_POPUP样式的顶级窗口
  • 所有者窗口具有WS_POPUP样式。

由于您似乎正在使用对话框(您的转换为MainDlg),我怀疑#1适用,您在创建对话框/ OnInitDialog之前调用了GetParent()。

GetLastError()

GetParent()