Celebrate National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

global dialog object

Posted on 1998-08-06
10
Medium Priority
?
305 Views
Last Modified: 2013-11-19
Is it illegal to define a program-global dialog box object?  It compiles perfectly, but when I run it, it gives me a runtime debug assertion error.

This is a dialog based app so I have a main dialog class called CTheDlg which is run in a modal loop in CTheApp.
What I need to do is have access (inspect and change) to a data member in CTheDlg throughout the whole program.  Is there a better method?
0
Comment
Question by:VEngineer
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
10 Comments
 
LVL 22

Expert Comment

by:nietod
ID: 1320307
MFC is not my area of expertise, but the problem could be that the constructor for the global dialog object needs to use MFC elements that are not initialized.

The solution would be to use a global pointer to a dynamically allocated object.  Allocate the object at startup, after MFC is done initializing.
0
 
LVL 3

Expert Comment

by:danny_pav
ID: 1320308
Why not try this:
CTheDlg * get_the_only_CTheDlg() {
  static CTheDlg dlg(...);
  return &dlg;
}

This will delay the initialization until the object is ready to be used and you will not have to explicitly call constructors and destructors.  I use this kind of thing a lot and have boilde it down to a template.

template<class T>T& get_the_only() {
  static T only_T;
  return only_T;
}

and then call it:

class CWhatever {
  public:
    CWhatever();

  public:
    func();
};





get_the_only<CWhatever>().func();

of course, this will only work if you have a constructor that takes no parameters.  This obviously will work without MFC.
0
 
LVL 3

Expert Comment

by:danny_pav
ID: 1320309
oops, sorry.  I meant to make that a comment.
0
Moving data to the cloud? Find out if you’re ready

Before moving to the cloud, it is important to carefully define your db needs, plan for the migration & understand prod. environment. This wp explains how to define what you need from a cloud provider, plan for the migration & what putting a cloud solution into practice entails.

 
LVL 2

Author Comment

by:VEngineer
ID: 1320310
Ok.. it's a comment again.
0
 
LVL 2

Author Comment

by:VEngineer
ID: 1320311
Let me try some of these options and see which one works out.
0
 
LVL 3

Expert Comment

by:danny_pav
ID: 1320312
My comment is complementary to nietod's.  I am agreeing with what he says, just giving an easier way to manage the memory.
0
 
LVL 9

Accepted Solution

by:
Priyesh earned 30 total points
ID: 1320313
I haven't tried this.. But do have a feeling that it should work...
             You might have seen the following code in the BOOL CDlgApp::InitInstance()
       m_pMainWnd = &dlg;
Well, u can always access the m_pMainWnd.. It's AfxGetApp()->m_pMainWnd.
This is a CWnd pointer and now contains the pointer of u'r dialog window. Get this and typecast to the Dialog class.
ie CDlgDlg* pDlg = (CDlgDlg*)(AfxGetApp()->m_pMainWnd);
U get a pointer to the dialog.. watch or change any member variable in this dialog through the above pointer.. it's easy isn't it?? Or did i miss u somewhere???
             Best wishes..

0
 
LVL 3

Expert Comment

by:danny_pav
ID: 1320314
the only problem with a global dialog box (or any global object) is thread/concurrency.  If you have but one thread (most common case), this is not an issue.  
0
 
LVL 2

Author Comment

by:VEngineer
ID: 1320315

Thanks for the help.  I found a hybrid solution with everyone's comments.
0
 
LVL 3

Expert Comment

by:danny_pav
ID: 1320316
use AfxGetMainWnd() instead of AfxGetApp()->m_pMainWnd
0

Featured Post

Moving data to the cloud? Find out if you’re ready

Before moving to the cloud, it is important to carefully define your db needs, plan for the migration & understand prod. environment. This wp explains how to define what you need from a cloud provider, plan for the migration & what putting a cloud solution into practice entails.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Database storage, where is the exe actually on the disc? Playing a game selected randomly (how to generate random numbers).  Error trapping with try..catch to help the code run even if something goes wrong. Continuing from the seve…
Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
Suggested Courses

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question