Click here to Skip to main content
11,629,614 members (80,225 online)
Click here to Skip to main content

Creating and consuming MFC DLLs for Beginners

, 18 Aug 2012 CPOL 369.1K 11.7K 121
Rate this:
Please Sign up or sign in to vote.
The objective of this tutorial is to demonstrate in a step by step manner how to build and call methods present in a DLL using Visual C++ 6.0. We are going to develop a DLL that takes in a string as input parameter and returns the string prefixed with a "Hello".

Sample Image


What is a DLL? DLL stands for Dynamic Link Library. Using DLL's offers several advantages as mentioned below:
  1. Simplify project management. Logical units of work can be split up among different groups during development process to help simplify project management. 
  2. Conserve memory. If two or more applications use the same DLL, the DLL is loaded into the RAM and this can be shared by all of the applications.
  3. Extend the features of an application. An application can determine the availability of DLL's dynamically load them & extend/limit the functionality of the application.
  4. Flexibility of programming languages. You can choose the language best suited for a particular module. Perhaps use Visual Basic for the UI & C++ for the business logic. 

Writing the application using a DLL

There are two parts to writing this application.
  1. Writing the DLL whose functions we are going to call
  2. Writing a test client for the DLL

Creating the DLL

  1. Fire up Visual C++ & choose the Project as MFC AppWizard(Dll) and type in Project name as MyDll
  2. Let the default selection for DLL type remain, i.e "Regular DLL using Shared MFC DLL"
  3. Click Finish and then Ok to get Visual Studio to generate the necessary files.
  4. Go to the class view, right click on “MyDll classes” and choose “New Class”.
  5. Now choose Class type as "Generic Class" .
  6. Type in the Class name CMyClass, the wizard automatically fills in the rest of the names.
  7. Go to the class view again
  8. Right click on the CMyClass and choose “Add Member Function”
  9. Type in the name of the function type as CString and fill in the function declaration as SayHello (CString strName). Choose Access type of the function as public. Note : CString is a MFC class that makes manipulation of strings very easy.
  10. Now go to file view and type in the following code into CMyClass.cpp as shown below in Code Snippet 2

  11. To be able to call the functions from an external application we have to prefix all function signatures with __declspec(dllexport) . This change is made in the CMyClass.h file as shown in Code Snippet 1

Compile the application and your DLL is ready

// CMyClass.h 
//{-----------     Code Snippet 1 --------------------------
class CMyClass  
	__declspec(dllexport)  CString SayHello (CString strName);
	__declspec(dllexport)  CMyClass();
	__declspec(dllexport)  virtual ~CMyClass();


//{-----------     Code Snippet 1 --------------------------

// CMyClass.cpp
//{-----------     Code Snippet 2 --------------------------

CString CMyClass::SayHello(CString strName)
	//Return the input string with a Hello prefixed 
	 return "Hello " + strName; 

//{-----------     Code Snippet 2 --------------------------

Creating the DLL Client

Now we write a 'Client' to test our DLL This is a MFC dialog based application with a edit box and two buttons.
  1. Select New MFC AppWizard(exe) from the project menu and type in the project name TestDLL
  2. Choose Dialog based application and click Finish
  3. You would now be looking at the application in the resource view. Add an edit box to the application by selecting the edit box, next click on the dialog box and drag.
  4. Also create a CString (value) variable associated with it, call this variable m_edit i.e Click on the edit box and press CTRL and W to bring up the class wizard. Choose the member variables tab and choose IDC_EDIT1 and click on “Add Variable”, of type "Value" and type m_edit
  5. Now a file called TestDLLDlg.cpp would have been generated .
  6. Double click the “Ok” button on the dialog, the wizard pops up a box asking a name for the function, choose the default name “OnOk” to go to the TestDLLDlg.cpp file
  7. Modify TestDLLdlg.cpp to look like the Code Snippet 1, the code entered has no effect and the project at this point will not compile. (Basically we are calling a method of a class object, this object has not been defined as yet.)
  8. Goto the file TestDLLDlg.h and include the header file for your class i.e MyClass.h .
  9. In the file TestDLLDlg.h declare an object of your class objMyClass present in the DLL
  10. After steps 8 & 9 the code looks as in Code Snippet 2
  11. We need to modify the project settings to compile the project, Click on "Project->Settings->Link" and in the "Object/Library Modules" enter the complete or relative path to the DLL's library file. i.e. A .lib file is generated in the same folder as your DLL, I have entered "..\MyDll\Debug\MyDll.lib" here.
  12. Compile the application and if it has compiled successfully. Run it. 

    Hey, Why are we getting this stupid box saying "Unable to located DLL" ? 
    Solution: Copy the MyDll.dll to the same folder as the TestDll.exe
    (See my comment

Run the application, enter a name in the text box and click the okay button, this will show a message box containing the same text prefixed with a hello.

// ----------------- Code Snippet 1 ----------------------------
void CTestDLLDlg::OnOK() 
	CString strResult = objMyClass.SayHello(m_edit);
	AfxMessageBox (strResult);
// ----------------- Code Snippet 1 ----------------------------
// ----------------- Code Snippet 2 ----------------------------
// CTestDLLDlg dialog

 #include "..\MyDll\MyClass.h" 

class CTestDLLDlg : public CDialog
// Construction
	CTestDLLDlg(CWnd* pParent = NULL);	// standard constructor
	 CMyClass objMyClass; 

// Dialog Data

// ----------------- Code Snippet 2 ----------------------------


After 10 years (of publishing this article) along came Ed to provide some comments which I feel may be useful -


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Imran Ebrahim
Product Manager
India India
Imran is a software professional with 9 years of development experience and has worked on JAVA, VB6, VC6, C# & some JavaScript.

He is interested in Hi-Performance code, OO Methodology, OS API's, Optimizing Windows, Tweaking IE.

For the last few years Imran has specialized in developing robust, hi-performance applications & GUI's (Swing) for MNC's.

You may also be interested in...

Comments and Discussions

GeneralRe: Help Please Pin
Martín Arbañil19-Dec-03 4:42
memberMartín Arbañil19-Dec-03 4:42 
GeneralRunning Error Pin
mimosa16-Oct-03 11:19
membermimosa16-Oct-03 11:19 
GeneralDLL guaranteed to work in VB Pin
ChrisNixon29-Sep-03 23:43
memberChrisNixon29-Sep-03 23:43 
GeneralRe: DLL guaranteed to work in VB Pin
ChrisNixon30-Sep-03 5:17
memberChrisNixon30-Sep-03 5:17 
GeneralRe: DLL guaranteed to work in VB Pin
harryr_20031-Oct-03 6:44
memberharryr_20031-Oct-03 6:44 
GeneralRe: DLL guaranteed to work in VB Pin
Tommy Svensson8-Jul-04 1:06
memberTommy Svensson8-Jul-04 1:06 
GeneralRe: DLL guaranteed to work in VB Pin
ChrisNixon8-Jul-04 2:23
memberChrisNixon8-Jul-04 2:23 
GeneralRe: DLL guaranteed to work in VB Pin
nevedko3-Oct-03 6:00
membernevedko3-Oct-03 6:00 
GeneralRe: DLL guaranteed to work in VB Pin
Neil Kurzman15-Apr-04 14:07
sussNeil Kurzman15-Apr-04 14:07 
GeneralThis article is very useful to me.But I've a question. Pin
whiteclouds17-Sep-03 20:24
memberwhiteclouds17-Sep-03 20:24 
QuestionHow to create a dialog in a dll... Pin
ombak23-Aug-03 7:15
memberombak23-Aug-03 7:15 
AnswerRe: How to create a dialog in a dll... Pin
Richard.cexo2-Sep-03 16:58
memberRichard.cexo2-Sep-03 16:58 
GeneralRe: How to create a dialog in a dll... Pin
asierra5-Sep-03 11:27
memberasierra5-Sep-03 11:27 
GeneralRe: How to create a dialog in a dll... Pin
George Clarence17-Feb-04 23:47
memberGeorge Clarence17-Feb-04 23:47 
Generalno source code Pin
eagertolearn16-Jul-03 16:21
membereagertolearn16-Jul-03 16:21 
GeneralThank you very much Pin
Martin_Viet11-Apr-03 4:32
memberMartin_Viet11-Apr-03 4:32 
GeneralError while calling a vc++ dll from vb Pin
bijtomy@tatanova.com7-Apr-03 6:38
memberbijtomy@tatanova.com7-Apr-03 6:38 
GeneralRe: Error while calling a vc++ dll from vb Pin
cedric moonen11-Apr-03 2:31
membercedric moonen11-Apr-03 2:31 
GeneralRe: Error while calling a vc++ dll from vb Pin
Martin_Viet11-Apr-03 4:56
memberMartin_Viet11-Apr-03 4:56 
Questionhow to export an function through DLL that belongs to a class derived from CWnd generic Pin
pranab kumar bharimalla12-Mar-03 20:25
memberpranab kumar bharimalla12-Mar-03 20:25 
GeneralCreating and consuming MFC DLLs for Beginners Pin
wb120624-Feb-03 4:54
memberwb120624-Feb-03 4:54 
GeneralNeed a bit help! Pin
Jiji6-Feb-03 20:15
memberJiji6-Feb-03 20:15 
QuestionHow to Calling DialogBox from DLL? Pin
zarrin27-Jan-03 22:08
memberzarrin27-Jan-03 22:08 
AnswerRe: How to Calling DialogBox from DLL? Pin
Jingmin Wei25-Feb-03 9:59
memberJingmin Wei25-Feb-03 9:59 
Generalexcellent Pin
shotgun20-Jan-03 13:36
membershotgun20-Jan-03 13:36 
GeneralRe: excellent Pin
RealProgrammer29-Mar-03 4:38
memberRealProgrammer29-Mar-03 4:38 
Generalhelp needed Pin
BORICUA9-Jan-03 19:54
memberBORICUA9-Jan-03 19:54 
Generalhelp needed Pin
Justin2313-Dec-02 21:12
memberJustin2313-Dec-02 21:12 
GeneralRe: help needed Pin
Anonymous15-Dec-02 17:03
sussAnonymous15-Dec-02 17:03 
GeneralNice One Pin
Anonymous26-Nov-02 20:53
sussAnonymous26-Nov-02 20:53 
GeneralMain function Pin
Julien Martin26-Aug-02 3:59
sussJulien Martin26-Aug-02 3:59 
GeneralRe: Main function Pin
Imran Ebrahim27-Aug-02 17:31
memberImran Ebrahim27-Aug-02 17:31 
GeneralDLL X-Files Pin
Gregsan10-Aug-02 23:45
memberGregsan10-Aug-02 23:45 
GeneralRe: DLL X-Files Pin
Imran Ebrahim27-Aug-02 17:28
memberImran Ebrahim27-Aug-02 17:28 
GeneralThanks :) Pin
Selevercin2-Aug-02 16:52
memberSelevercin2-Aug-02 16:52 
QuestionHow to load a MFC dll with LoadLibrary() Pin
WilliamXu5188-Jul-02 5:01
memberWilliamXu5188-Jul-02 5:01 
GeneralCopying of '.dll' to other folder. Pin
WREY5-Jul-02 13:19
memberWREY5-Jul-02 13:19 
GeneralRe: Copying of '.dll' to other folder. Pin
Imran E7-Jul-02 19:25
memberImran E7-Jul-02 19:25 
GeneralRe: Copying of '.dll' to other folder. Pin
Scorpion7714-Feb-03 4:18
memberScorpion7714-Feb-03 4:18 
GeneralAnother way Pin
Richard Lewis1-Jul-02 18:45
memberRichard Lewis1-Jul-02 18:45 
GeneralRe: Another way Pin
WREY5-Jul-02 11:38
memberWREY5-Jul-02 11:38 
GeneralRe: Another way Pin
richiehere21-Jul-02 22:45
memberrichiehere21-Jul-02 22:45 
GeneralRe: Another way Pin
rajkanth30-Oct-02 0:04
memberrajkanth30-Oct-02 0:04 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.150723.1 | Last Updated 18 Aug 2012
Article Copyright 2002 by Imran Ebrahim
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid