Click here to Skip to main content
Click here to Skip to main content

Using one extension DLL in another

, 15 Dec 1999
Rate this:
Please Sign up or sign in to vote.
How to avoid link errors when using one MFC extension DLL from another
<!-- Article Starts -->

If you create an extension DLL you can most conveniently export one or more of its classes using AFX_EXT_CLASS. However if you create a second extension DLL and try to use classes from the first you will run into a small problem.

The value of AFX_EXT_CLASS will cause your new DLL to try and export your dependent classes! You will get link errors such as below for the classes in the first DLL:

error LNK2001: unresolved external symbol ..........

What you need to do is temporarily re-define AFX_EXT_CLASS when you include the header files for the classes in the DLL you are importing classes from. The following example shows how to do this:

//change the definition of AFX_EXT... to make it import</P>

#undef AFX_EXT_API
#define AFX_EXT_API         AFX_API_IMPORT

//Include headers for the dll / lib that we use classes from

#include "DLLOne.H"

//put the values back to make AFX_EXT_CLASS export again

#undef AFX_EXT_API
#define AFX_EXT_API         AFX_API_EXPORT

//Include headers for the classes we are creating in this DLL

#include "DLLTwo.H"


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Randy More

United States United States
No Biography provided

Comments and Discussions

GeneralMy vote of 5 PinmemberJasMineLeaf14-Oct-13 0:10 
QuestionBetter solution?!? PinsussShinydooga15-May-03 6:54 
This is not a client only solution like above but handles the situation more elegantly and, I believe, nesting.
1) In the server DLL's stdafx.h include:
#define WHATEVER_DLL_Export __declspec(dllexport)
where WHATEVER_DLL_Export is unique within the client code base i.e.
MFC and in house.
2) In the server DLL, exported classes are declared:
class WHATEVER_DLL_Export CClassName ...
3) In a globally included file per each client exe and dll:
#define WHATEVER_DLL_Export __declspec(dllimport)
4) In a globally included file per each client library:
#define WHATEVER_DLL_Export

AnswerRe: Better solution?!? Pinmemberquangtin328-Aug-07 19:12 
Generalbug PinmemberRobit26-May-01 16:56 

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
Web03 | 2.8.150326.1 | Last Updated 16 Dec 1999
Article Copyright 1999 by Randy More
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid