15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


HELP! MFC DLL can't do messages.....

David Little -- dlittle@communique.net
Saturday, September 28, 1996


Environment: Win95, VC++ 4.1, PS4.0

I am writing a DLL using MFC, and plan to call it from PS FORTRAN.  I =
exported this function from the DLL:

BOOL __stdcall DISPLAYABOUTDIALOG(int* Parent)
{

	AFX_MANAGE_STATE(AfxGetStaticModuleState( ));

	HWND hWndParent =3D (HWND)(*Parent);

	TRY
	{
		CAboutDlg dlg(CWnd::FromHandle(hWndParent));
		if (dlg.DoModal() !=3D IDOK)
			return FALSE;
	}
	CATCH_ALL(e)
	{
		// a failure caused an exception.
		return FALSE;
	}
	END_CATCH_ALL

	return TRUE;
}

The CAboutDlg is generated by the ClassWizard, with no changes.  When I =
call this function, the about box paints, then I get an assert here:

		// phase2: pump messages while available
		do
		{
			ASSERT(ContinueModal());

			// pump message, but quit on WM_QUIT
	if (!AfxGetThread()->PumpMessage())  <=3D=3D=3D ASSERT HERE..
	{
		AfxPostQuitMessage(0);
		return -1;
	}

because AfxGetThread() returns a null, and therefore can't handle =
messages...

HELP!

Thanks!
David



Shanku Niyogi -- shanku@accent.net
Monday, September 30, 1996


>From: David Little 
>To: 'mfc-l@netcom.com'
>Subject: HELP! MFC DLL can't do messages.....
>Date: Saturday, September 28, 1996 10:05 PM
>
>
>Environment: Win95, VC++ 4.1, PS4.0
>
>I am writing a DLL using MFC, and plan to call it from PS FORTRAN.  I
>exported this function from the DLL:
>
>....
>
>
>because AfxGetThread() returns a null, and therefore can't handle
messages...

David, the main problem is that MFC has not initialized a CWinApp-type
object in the DLL. To do this, you need to compile the DLL to statically
link MFC - the _USRDLL define, and include a CWinApp derived object
in your app.

This would not have been a problem in MFC 2.0, but MFC 4.0 implements
all modal dialogs as modeless dialogs with its own message loop. 

For details see MFC Technical Note 11.

Regards,

Shanku.


=======================================================================
Shanku S. Niyogi                                                      
shanku@accent.net
Etobicoke, Ontario, Canada





David Little -- dlittle@communique.net
Thursday, October 03, 1996

>David, the main problem is that MFC has not initialized a CWinApp-type
>object in the DLL. To do this, you need to compile the DLL to =
statically
>link MFC - the _USRDLL define, and include a CWinApp derived object
>in your app.
>
>This would not have been a problem in MFC 2.0, but MFC 4.0 implements
>all modal dialogs as modeless dialogs with its own message loop.=20
>
>For details see MFC Technical Note 11.

I do have a CWinApp derived object in my DLL, and I read TN11.  I also =
have read through DLLTRACE and DLLHUSK, neither of which really helps =
much.  DLLTRACE is the closest that I can come to what I want, but it =
forces the calling app (.EXE) to call PreTranslateMessage and OnIdle in =
the DLL.  I don't even have a message loop (at least easily) in my =
FORTRAN QuickWin app.  I made my modal dialogs work using the =
old-fashioned way of DialogBox(....) and my own message loop, but that =
doesn't help the modeless ones...

Still looking for ideas!  Thanks!

David


----------
From: 	Shanku Niyogi[SMTP:shanku@accent.net]
Sent: 	Monday, September 30, 1996 10:27 AM
To: 	mfc-l@netcom.com
Subject: 	Re: HELP! MFC DLL can't do messages.....


>From: David Little 
>To: 'mfc-l@netcom.com'
>Subject: HELP! MFC DLL can't do messages.....
>Date: Saturday, September 28, 1996 10:05 PM
>
>
>Environment: Win95, VC++ 4.1, PS4.0
>
>I am writing a DLL using MFC, and plan to call it from PS FORTRAN.  I
>exported this function from the DLL:
>
>....
>
>
>because AfxGetThread() returns a null, and therefore can't handle
messages...

David, the main problem is that MFC has not initialized a CWinApp-type
object in the DLL. To do this, you need to compile the DLL to statically
link MFC - the _USRDLL define, and include a CWinApp derived object
in your app.

This would not have been a problem in MFC 2.0, but MFC 4.0 implements
all modal dialogs as modeless dialogs with its own message loop.=20

For details see MFC Technical Note 11.

Regards,

Shanku.


=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Shanku S. Niyogi                                                     =20
shanku@accent.net
Etobicoke, Ontario, Canada




| Вернуться в корень Архива |