Announcement

Collapse
No announcement yet.

Variablen aus DLL auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Variablen aus DLL auslesen

    Hallo,

    ich habe ein bestehendes Programm und eine Dll, die ich in diesem Programm verwende und die die Ressourcen sowie die Dialoge enthält.

    Nun möchte ich außerdem die Texte der Messageboxen, die im Hauptprogramm sind in die DLL auslagern, um das Programm in verschiedenen Sprachen erstellen zu können und dazu nur die DLL ändern zu müssen.

    Ich lade die DLL am anfang des Programms mit
    Code:
    g_hRsrc = LoadLibrary(k_szRsrcLibFileName);
    und habe in der Headerdatei des Hauptprogramms folgende Deklarationen:
    Code:
    extern  TCHAR MBOX_FAILURE[];
    extern  TCHAR MBOX_ATTENTION[];
    extern  TCHAR MBOX_LICENCEFAULT[];
    extern  TCHAR MBOX_OLDVERSION[];
    die DLL sieht folgendermaßen aus:
    Header:
    Code:
    #ifdef CHECKLIST_LANGUAGE_EXPORTS
    #define CHECKLIST_LANGUAGE_API __declspec(dllexport)
    #else
    #define CHECKLIST_LANGUAGE_API __declspec(dllimport)
    #endif
    
    // Diese Klasse wird aus checklist_language.dll exportiert.
    class CHECKLIST_LANGUAGE_API Cchecklist_language {
    public:
    	Cchecklist_language(void);
    	// TODO: Hier die Methoden hinzufügen.
    };
    und cpp:
    Code:
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
    					 )
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    	case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
    		break;
    	}
        return TRUE;
    }
    
    // Dies ist das Beispiel einer exportierten Variable.
    CHECKLIST_LANGUAGE_API int nchecklist_language=10;
    
    //Sprachvariablen für Messageboxen im Hauptprogramm///////////////////
    //MessageboxÜberschriften/////////////////
    CHECKLIST_LANGUAGE_API TCHAR MBOX_FAILURE[] = TEXT("Fehler!");
    CHECKLIST_LANGUAGE_API TCHAR MBOX_ATTENTION[] = TEXT("Achtung!");
    CHECKLIST_LANGUAGE_API TCHAR MBOX_LICENCEFAULT[] = TEXT("Lizenzdatei stimmt nicht mit dem Gerät überein oder fehlt!");
    CHECKLIST_LANGUAGE_API TCHAR MBOX_OLDVERSION[] = TEXT("Sie benutzen eine zu alte Version!");
    Ich habe alles gleich deklariert wie für die Dialogfenster auch, jedoch bekomme ich beim Compilieren des Hauptprogramms Fehlermeldungen:

    Checklist.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""wchar_t * MBOX_OLDVERSION" (?MBOX_OLDVERSION@@3PA_WA)".
    Checklist.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""wchar_t * MBOX_ATTENTION" (?MBOX_ATTENTION@@3PA_WA)".
    Checklist.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""wchar_t * MBOX_LICENCEFAULT" (?MBOX_LICENCEFAULT@@3PA_WA)".
    Checklist.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""wchar_t * MBOX_FAILURE" (?MBOX_FAILURE@@3PA_WA)".

    Wie kann ich auf die Variablen in der DLL zugreifen?

    Vielen Dank

    Andreas Schlegel

  • #2
    Man kann in der EXE keine Daten als extern deklarieren und diese dann durch eine DLL hinzufügen.

    Die EXE ist ein eigenständiges Programm. EXTERN teilt dem Compiler mit, dass die Daten "irgendwo" anders liegen. Allerdings schon innerhalb der EXE. Mitnichten in einem anderen Programm -> hier DLL

    Wie sollte also der Compiler das auflösen.

    Wozu hast du eine Klasse in der DLL, wenn du diese nicht nutzt??

    Des Weiteren reicht es nicht, die DLL zu laden. Bei einer dynamischen Nutzung musst du nun auch irgendwas mit der DLL machen:

    http://www.marquardtnet.info/cecke/t...s.8/8_dll.html
    Christian

    Comment

    Working...
    X