Solved

How can I create dialog with ActiveX control in MFC supported console application?

Posted on 2001-07-03
8
1,610 Views
Last Modified: 2013-11-20
Hi,
I writing a console application with MFC support.
I've craeted "CMyDialog : public CDialog" class.
this dialog has an ActiveX control.

When I'm calling CMyDialog.Create(IDD_MYDIALOG) the function failed, and I'm getting the following warning:

First-chance exception in MyApplication.exe (OLE32.DLL): 0xC0000005: Access Violation.
First-chance exception in MyApplication.exe (KERNEL32.DLL): 0x8001010D: (no name).
Warning: CreateDlgControls failed during dialog init.

Can someone help me?

How can I create this dialog sucessfully?

Thanks,
Michael
0
Comment
Question by:bachar
8 Comments
 
LVL 4

Expert Comment

by:inpras
ID: 6248951
How did you create your application? Can please explain in more detail what exactly you mean console application with MFC Support?
0
 

Author Comment

by:bachar
ID: 6249003
O.k.

I've created it with Microsoft Visual Stodio 6.
I've created a new console application with the MSDEV wizard, one of the options is: Console Application with MFC support.

actually it adds several MFC header files to the Win32 Console application.
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 6250309
I was able to bring up a dialog box with a webbrowser ActiveX by adding this at the bottom of _tmain

   afxContextIsDLL= FALSE;  // else AfxOleInit fails
   BOOL fRet= AfxOleInit();
   AfxEnableControlContainer();

   CMyDialog dlg;
   theApp.m_pMainWnd= &dlg;
   dlg.DoModal();

I can't find any documentation on afxContextIsDLL or why it has been set to TRUE, but AfxOleInit() must be called and the code in there will short-curcuit if afxContextIsDLL is TRUE.

-- Dan
0
 
LVL 2

Expert Comment

by:GloriousRain
ID: 6251219
Dialogs that contain ActiveX controls are more difficult to create indirectly because they require additional information such as license keys and the initial states of properties. See below article:
<MSDN>
HOWTO: Use a Dialog Template to Create a MFC Dialog with an ActiveX Control

Q231591


--------------------------------------------------------------------------------
The information in this article applies to:

The Microsoft Foundation Classes (MFC), included with:
Microsoft Visual C++, 32-bit Editions, versions 4.2, 5.0, 6.0

--------------------------------------------------------------------------------


SUMMARY
It is possible to display a dialog from either a DIALOG resource or from a dialog template in memory. In the latter case, the dialog template is either constructed or loaded into memory and the dialog is created indirectly.

Dialogs that contain ActiveX controls are more difficult to create indirectly because they require additional information such as license keys and the initial states of properties. MFC requires that this additional information be provided as a DLGINIT resource. The Visual C++ resource editor creates this DLGINIT resource in the resource (.rc) file for each dialog containing an ActiveX control.


Both CDialog::CreateIndirect() and CDialog::InitModalIndirect() support using DLGINIT resources with dialog templates in memory. However, the DLGINIT parameter is not documented and by default is set to NULL. The complete prototypes for these functions are:




BOOL CDialog::CreateIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd, void* lpDialogInit, HINSTANCE hInst);

BOOL CDialog::InitModalIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd = NULL,void* lpDialogInit = NULL);

NOTE: Only the versions of these functions which take a LPCDLGTEMPLATE as the first parameter support passing a DLGINIT resource. The versions which take a HGLOBAL parameter do not support DLGINIT resources.



MORE INFORMATION
The following source shows how to load a DIALOG resource from memory and display it indirectly using a dialog template in memory. This function also uses the DLGINIT resource and will work with DIALOG resources that contain ActiveX controls.



void CMainFrame::OnMyModalDialogIndirect()
{
     //Load DLGTEMPLATE
     DLGTEMPLATE* pTemplate;
 
     HINSTANCE hInst= AfxFindResourceHandle(
                            MAKEINTRESOURCE(IDD_INDIRECT),RT_DIALOG);
     
     if (hInst == NULL)
     {
          TRACE("Cound not find resource in resource chain");
          ASSERT(FALSE);
          return;
     }
 
     HRSRC hRsrc = ::FindResource(hInst, MAKEINTRESOURCE(IDD_INDIRECT),
          RT_DIALOG);
     ASSERT(hRsrc != NULL);

     HGLOBAL hTemplate = ::LoadResource(hInst, hRsrc);
     ASSERT(hTemplate != NULL);
 
     pTemplate = (DLGTEMPLATE*)::LockResource(hTemplate);

     //Load coresponding DLGINIT resource
     void* lpDlgInit;
     HGLOBAL hDlgInit = NULL;

     HRSRC hsDlgInit = ::FindResource(hInst, MAKEINTRESOURCE(IDD_INDIRECT),
                             RT_DLGINIT);
     if (hsDlgInit != NULL)
     {
          // load it
          hDlgInit = ::LoadResource(hInst, hsDlgInit);
          ASSERT(hDlgInit != NULL);

          // lock it
          lpDlgInit = ::LockResource(hDlgInit);
          ASSERT(lpDlgInit != NULL);
     }

     //ToDo: Modify DLGTEMPLATE in memory if desired

     CDialog dlg;
     dlg.InitModalIndirect(pTemplate, NULL, lpDlgInit);  
     dlg.DoModal();    
 
     ::UnlockResource(hTemplate);
     ::FreeResource(hTemplate);
     if (hDlgInit)
     {
          ::UnlockResource(hDlgInit);  
          ::FreeResource(hDlgInit);
     }    
}
<MSDN>
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 49

Expert Comment

by:DanRollins
ID: 6744225
hi bachar,
Do you have any additional questions?  Do any comments need clarification?

-- Dan
0
 
LVL 49

Accepted Solution

by:
DanRollins earned 300 total points
ID: 6762849
hi bachar,
Do you have any additional questions?  Do any comments need clarification?

-- Dan
0
 
LVL 5

Expert Comment

by:Netminder
ID: 6805970
bachar,

These questions are still open and our records show you logged in recently. Please resolve them appropriately as soon as possible. Continued disregard of your open questions will result in the force/acceptance of a comment as an answer; other actions affecting your account may also be taken. I will revisit these questions in approximately seven (7) days. Please note that the recommended minimum for an "Easy" question is 50 points.
http://experts-exchange.com/jsp/qShow.jsp?ta=progsoftgen&qid=20186509
http://experts-exchange.com/jsp/qShow.jsp?ta=progsoftgen&qid=20100277
http://experts-exchange.com/jsp/qShow.jsp?ta=progsoftgen&qid=20005648
http://experts-exchange.com/jsp/qShow.jsp?ta=progsoftgen&qid=11452298
http://experts-exchange.com/jsp/qShow.jsp?ta=progsoftgen&qid=11404058
http://experts-exchange.com/jsp/qShow.jsp?ta=cplusprog&qid=20141685
http://experts-exchange.com/jsp/qShow.jsp?ta=cplusprog&qid=20093290
http://experts-exchange.com/jsp/qShow.jsp?ta=mfc&qid=20145151
http://experts-exchange.com/jsp/qShow.jsp?ta=mfc&qid=20116236
http://experts-exchange.com/jsp/qShow.jsp?ta=mfc&qid=20094685
http://experts-exchange.com/jsp/qShow.jsp?ta=networkgen&qid=20032846

EXPERTS: Please leave your thoughts on this question here.

Thanks,

Netminder
Community Support Moderator
Experts Exchange
0
 
LVL 5

Expert Comment

by:Netminder
ID: 6826216
Admin notified of user neglect. Force/accepted by

Netminder
Community Support Moderator
Experts Exchange
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Complete beginner needs help making a cron job 9 110
viewing source code from eclipse 13 88
Doc'in system (example?) BA 7 89
sum28 challenge 31 106
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…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
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.
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.

895 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

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now