Click here to Skip to main content
15,921,052 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: Sorted List Pin
Not Active25-Sep-01 11:45
mentorNot Active25-Sep-01 11:45 
GeneralRe: Sorted List Pin
User 988525-Sep-01 12:06
User 988525-Sep-01 12:06 
GeneralRe: Sorted List Pin
The_Server25-Sep-01 13:41
The_Server25-Sep-01 13:41 
GeneralActive document server & print preview Pin
25-Sep-01 10:53
suss25-Sep-01 10:53 
GeneralDLLs: conceptual questions Pin
Stephen Wilson25-Sep-01 10:19
Stephen Wilson25-Sep-01 10:19 
GeneralRe: DLLs: conceptual questions Pin
Michael P Butler25-Sep-01 10:29
Michael P Butler25-Sep-01 10:29 
GeneralRe: DLLs: conceptual questions Pin
Stephen Wilson25-Sep-01 11:08
Stephen Wilson25-Sep-01 11:08 
GeneralRe: DLLs: conceptual questions Pin
Mike Burston25-Sep-01 12:32
Mike Burston25-Sep-01 12:32 
Stephen,

About a year ago I set up a system very similar to what you are looking for. I created an abstract base class that defined the entire interface that I needed for the main program, then created a series of DLLs that implemented specific instances of the class.

Quick code :

class Base { // in file "Base.h", included into each DLL
public:
virtual void showMsg(string msg);
virtual string translateMsg(string msg);
};

Then create a "German.DLL"

...
class German : public Base {
public:
virtual void showMsg(string msg) { ... }
virtual strin translateMsg(string msg) { ... }
};

__declspec ( dllexport) Base* create();
...

And create a "French.DLL"

...
class French : public Base {
public:
virtual void showMsg(string msg) { ... }
virtual string translateMsg(string msg) { ... }
};

__declspec ( dllexport) Base* create();
...

In the main program :

...
void (create*)();
HMODULE lib;


// Create the required type of language by loading DLL and finding 'create' function

Base* language_;
switch (type) { // assume we have varialbe 'type' which tells us what we want
case GERMAN :
lib = LoadLibrary("German.dll");
create = GetProcAddress(lib,"create");
language = create();
break;
case FRENCH :
lib = LoadLibrary("French.dll");
create = GetProcAddress(lib, "create");
break;
}
language = create();

// and Use
string msg = language->translateMsg("Hello");
language->showMsg(msg);
...

This approach only works if the main prgram NEVER needs to call a class specific function - it can only ever call functions declared in the "base" class. It also has the advantage that you only need to export a single function from each DLL - the 'object factory'. This is all very similar in concept to COM, but much simpler to code. COM would be preferable if the application was (or could) be in another programming language.

You don't need to use extension DLLs - the differences are mainly to do with resource management. Unless you have a specific need, then 'standard' dlls will work fine.

Syntax is probably a bit rusty in the sample code. Hope this helps.



-------------------------
Reg : "Well, what Jesus blatantly fails to appreciate is that it's the meek who are the problem."

GeneralThanks! It looks really useful Pin
Stephen Wilson25-Sep-01 13:02
Stephen Wilson25-Sep-01 13:02 
GeneralRe: Thanks! It looks really useful Pin
Mike Burston25-Sep-01 14:31
Mike Burston25-Sep-01 14:31 
GeneralCFindAndReplace Dialog Pin
25-Sep-01 8:33
suss25-Sep-01 8:33 
Generalaccessing adressbar of IE Pin
25-Sep-01 7:06
suss25-Sep-01 7:06 
QuestionHow do I access individual bits? Pin
Craig Miller25-Sep-01 6:42
Craig Miller25-Sep-01 6:42 
AnswerRe: How do I access individual bits? Pin
Chris Losinger25-Sep-01 6:58
professionalChris Losinger25-Sep-01 6:58 
GeneralRe: How do I access individual bits? Pin
Craig Miller26-Sep-01 8:16
Craig Miller26-Sep-01 8:16 
AnswerRe: How do I access individual bits? Pin
User 988525-Sep-01 11:10
User 988525-Sep-01 11:10 
GeneralDirectShow (again) Pin
#realJSOP25-Sep-01 6:40
professional#realJSOP25-Sep-01 6:40 
GeneralNeed a link to article Pin
25-Sep-01 6:36
suss25-Sep-01 6:36 
GeneralRe: Need a link to article Pin
Michael Dunn25-Sep-01 16:59
sitebuilderMichael Dunn25-Sep-01 16:59 
GeneralWTL windows and unchanging cursors Pin
The Arabundi25-Sep-01 6:05
The Arabundi25-Sep-01 6:05 
GeneralRe: WTL windows and unchanging cursors Pin
Tim Smith25-Sep-01 6:33
Tim Smith25-Sep-01 6:33 
GeneralRe: WTL windows and unchanging cursors Pin
The Arabundi25-Sep-01 9:05
The Arabundi25-Sep-01 9:05 
GeneralTab order question Pin
RobJones25-Sep-01 5:51
RobJones25-Sep-01 5:51 
GeneralRe: Tab order question Pin
RobJones25-Sep-01 7:01
RobJones25-Sep-01 7:01 
GeneralRe: Tab order question Pin
Paolo Messina26-Sep-01 0:46
professionalPaolo Messina26-Sep-01 0:46 

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

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