Click here to Skip to main content
Licence 
First Posted 5 Jun 2003
Views 51,567
Downloads 584
Bookmarked 24 times

A Simple Resource Manager

By Weiye Chen | 5 Jun 2003
This is a simple class that you can use to load and use another resource DLL if it is present during runtime.
5 votes, 38.5%
1
1 vote, 7.7%
2
1 vote, 7.7%
3
2 votes, 15.4%
4
4 votes, 30.8%
5
2.92/5 - 13 votes
μ 2.60, σa 3.15 [?]

Introduction

I have created this class to help me load a different resource DLL if it is present during runtime. An example would be a multi-language application. If another resource DLL (with a name specified at compile time) is present, it can load and use it as the resource for the application.

Let's look at the class header. It is quite simple and I think the comments describe well about the individual methods.

class CResourceManager  
{
// Operations
public:

    // Constructor
    CResourceManager();

    // Destructor
    virtual ~CResourceManager();

    // Load external resource dll. If file not present or unable to load,
    // it returns FALSE. If it is present, it is loaded but does not affect
    // the default resource of the application. You should call this if you
    // want to manage the current application resource and an external one.
    BOOL Setup(CString);

    // Load external resource dll and set it as default for application.
    // Before setting as default, the current resource handle is stored
    // in case when you need to access the resource there.
    // If file not present or unable to load, the current application
    // resource is being used. 
    BOOL SetupEx(CString);

    // Get string from string table of external resource if any
    // If there is an external resource loaded, GetString will retrieve from
    // there. If not, it will retrieve from the application default resource.
    CString GetString(UINT);

// Attributes
private:

    HINSTANCE m_hExternalResource; // Handle to external resource loaded
    HINSTANCE m_hApplicationResource; // Handle to current application resource
};

Using the code

Below is an example of how you may use the methods of the class. First you need to create an object of CResourceManager. You can put it as global or as a member of your application class. Then, call the Setup(...) method in InitInstance(...) as shown below.

BOOL CtestApp::InitInstance()
{
    // InitCommonControls() is required on Windows XP if an application
    // manifest specifies use of ComCtl32.dll version 6 or later to enable
    // visual styles.  Otherwise, any window creation will fail.
    InitCommonControls();

    CWinApp::InitInstance();

    // Initialize OLE libraries
    if (!AfxOleInit())
    {
        AfxMessageBox(IDP_OLE_INIT_FAILED);
        return FALSE;
    }
    AfxEnableControlContainer();



    // Load and set the specified resource dll as default if it is present.
    // Normally the location of the dll would be the same as the executable
    // and you would need to determine it with GetModuleFileName(...), but
    // in this case, i assume i know where the dll is located.
    m_oResourceManager.SetupEx(_T("C:\\MyProjects\\anotherres.dll"));

    .
    .
    .
    
    // The one and only window has been initialized, so show and update it
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();
    // call DragAcceptFiles only if there's a suffix
    //  In an SDI app, this should occur after ProcessShellCommand
    return TRUE;
}

As for cleaning up the loaded resource DLL, the destructor will handle it as shown below.

CResourceManager::~CResourceManager()
{
    // Check if handle is valid, free library
    if (m_hExternalResource != NULL)
        FreeLibrary(m_hExternalResource);

    // Init handles
    m_hExternalResource = NULL;
    m_hApplicationResource = NULL;
}

Points of interest

I admit that this class do fall short in terms of the other resource problems that could be addressed, but feel free to extend it if you want. :)

License

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

Weiye Chen

Other

Singapore Singapore

Member


Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralAre you the one!!!!!111 Pinmembersaajan3:30 18 May '04  
Are you the one who studied in JNV Idukki,
Any way the resource manger seemed not to work in different languages .Do you have any idea of language translation in Czech fully? thats some chars are not shown by the editor and the dialog?
GeneralRe: Are you the one!!!!!111 PinmemberWeiye Chen6:05 20 May '04  
GeneralPlease provide a demo application. PinmemberJohn M. Drescher5:31 7 Jun '03  
GeneralBroken link. PinmemberWREY3:21 7 Jun '03  
GeneralRe: Broken link. PinmemberWeiye Chen4:15 7 Jun '03  
GeneralSomething handy to have around. PinmemberWREY5:00 7 Jun '03  
GeneralRe: Something handy to have around. PinmemberWeiye Chen5:25 7 Jun '03  
GeneralRe: Something handy to have around. PinmemberAnton Heidelwalder5:54 28 Oct '04  
GeneralRe: Something handy to have around. PinmemberWREY8:02 28 Oct '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.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120210.1 | Last Updated 6 Jun 2003
Article Copyright 2003 by Weiye Chen
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid