Skip to main content
Email Password   helpLost your password?

Sample Image - ManagedMFCDLL.gif

This wizard allows you to build a managed C++ dynamic link library which also serves as an MFC regular DLL. I developed this wizard when I was trying to figure out a way to convert MFC controls into windows forms control (an article on this would follow). Since I still used existing MFC code through IJW it made sense to make the managed assembly also a MFC regular DLL.

The wizard creates following files :-

The wizard takes care of all the required project settings. Here is how the <project name.cpp> file looks like

// This is the main DLL file.


#include "stdafx.h"


#include "Test.h"


#pragma unmanaged

//Place all unmanaged code between these blocks


// CTestApp

// See Test.cpp for the implementation of this class

//


class CTestApp : public CWinApp
{
public:
	CTestApp();

// Overrides

public:
	virtual BOOL InitInstance();

	DECLARE_MESSAGE_MAP()
};

//

//	Note!

//

//		If this DLL is dynamically linked against the MFC

//		DLLs, any functions exported from this DLL which

//		call into MFC must have the AFX_MANAGE_STATE macro

//		added at the very beginning of the function.

//

//		For example:

//

//		extern "C" BOOL PASCAL EXPORT ExportedFunction()

//		{

//			AFX_MANAGE_STATE(AfxGetStaticModuleState());

//			// normal function body here

//		}

//

//		It is very important that this macro appear in each

//		function, prior to any calls into MFC.  This means that

//		it must appear as the first statement within the 

//		function, even before any object variable declarations

//		as their constructors may generate calls into the MFC

//		DLL.

//

//		Please see MFC Technical Notes 33 and 58 for additional

//		details.

//


// CTestApp


BEGIN_MESSAGE_MAP(CTestApp, CWinApp)
END_MESSAGE_MAP()

// CTestApp construction


CTestApp::CTestApp()
{
	// TODO: add construction code here,

	// Place all significant initialization in InitInstance

}


// The one and only CTestApp object


CTestApp theApp;

// CTestApp initialization


BOOL CTestApp::InitInstance()
{
	CWinApp::InitInstance();

	return TRUE;
}

#pragma managed

Note that the implementation is enclosed within #pragma unmanaged and #pragma managed blocks to force the generation of native code. By default any file include in the project gets compiled into IL.

I recommend that you build a separate MFC static library for any MFC code you want to include in the managed code and link it with this DLL. Place only managed code in this DLL. This clean separation turns out to be very useful. One of the thing to be careful about is to mainatin the state of MFC module using AFX_MANAGE_STATE If this DLL is dynamically linked against the MFC DLLs (default). Any managed methods called from external sources should be enclosed with AFX_MANAGE_STATE(AfxGetStaticModuleState()); This is neccessary if the code calls any (well most) MFC functions.

Here are the steps you must take to install the wizard :-

  1. Unzip all files to any directory. Lets call the directory <install dir>
  2. Copy ManagedMFCDLL.vsdir, ManagedMFCDLL.vsz, ManagedMFCDLL.ico to <vsinstalldir>/VC7/VCProjects directory. <vsinstalldir> is the directory where you installed VS.NET.
  3. Finally you need to modify ManagedMFCDLL.vsz which looks like this
    VSWIZARD 7.0
    Wizard=VsWizard.VsWizardEngine
    
    Param="WIZARD_NAME = ManagedMFCDLL"
    Param="ABSOLUTE_PATH = G:\wksrc\ManagedMFCDLL"
    Param="FALLBACK_LCID = 1033"
    Param="WIZARD_UI = FALSE"
    Param="SOURCE_FILTER = txt"		
    		

You need to replace g:\wksrc\ManagedMFCDLL to the path where you unzipped the files (<install dir>).

That's all there is to it.

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
GeneralUse VB2005 dll in unmanaged vc++ Pin
cmasantos
2:50 22 Oct '08  
QuestionDoes not work in VS 2005 Pin
daaboots
4:46 27 Dec '07  
GeneralRe: Does not work in VS 2005 Pin
Rama Krishna Vavilala
5:55 27 Dec '07  
GeneralRe: Does not work in VS 2005 Pin
daaboots
6:03 27 Dec '07  
QuestionThis is a great Hack, but why does the class derive from CWinApp? Pin
gunag
4:14 10 Jul '06  
AnswerRe: This is a great Hack, but why does the class derive from CWinApp? Pin
Rama Krishna Vavilala
4:30 10 Jul '06  
GeneralRe: This is a great Hack, but why does the class derive from CWinApp? Pin
gunag
23:52 10 Jul '06  
GeneralProblem moving mfc dll to another machine Pin
Anonymous
17:17 3 Dec '04  
QuestionRe: Problem moving mfc dll to another machine Pin
Julie JP
5:53 22 Sep '05  
GeneralManaged Code in MFC 7.0 Application Pin
Liaqat
9:11 4 May '04  
Generalerror RC2135 : file not found: myproject.tlb Pin
fftz
21:23 30 Mar '04  
GeneralRe: error RC2135 : file not found: myproject.tlb Pin
ruida
21:45 18 Apr '04  
GeneralRe: error RC2135 : file not found: myproject.tlb Pin
Eliya Mirov
22:44 5 May '07  
GeneralChanges for VS.NET v.7.1 Pin
igor_patlan
7:58 6 Feb '04  
GeneralRe: Changes for VS.NET v.7.1 Pin
mensikd
2:16 21 Jan '05  
GeneralRe: Changes for VS.NET v.7.1 Pin
Martin_M_84
3:25 27 Feb '06  
GeneralLNK4243 Error Pin
Keith Rule
14:28 4 Feb '04  
Generallink MFC->C++.NET Pin
kikos french .NET developer
5:31 22 Jan '04  
GeneralDoes not work in VS 2003 Pin
salims
21:58 10 Nov '03  
GeneralRe: Does not work in VS 2003 - Fix Pin
rcgosse
12:51 25 Jan '04  
GeneralI get an afxwin1.inl assertion on line 26 when trying to use an MFC dialog or frame from C#. Pin
johnWise
10:37 27 Oct '03  
GeneralRe: I get an afxwin1.inl assertion on line 26 when trying to use an MFC dialog or frame from C#. Pin
johnWise
11:40 27 Oct '03  
GeneralMemory Leak Pin
Uma Mahes
19:14 7 Jul '03  
GeneralRe: Memory Leak Pin
JimCryer
5:33 1 Aug '03  
GeneralRe: Memory Leak Pin
Uma Mahes
0:57 5 Aug '03  


Last Updated 8 Mar 2002 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009