LoadLibrary Funktion

Hallo,

ich möchte in meinem Programm eine DLL, bspw. die user32.dll, verwenden.

Laut der MSDN Seite muss man die DLL mittels der Funktion LoadLibrary erst laden um sie verwenden zu können. Dies versuche ich folgendermaßen:

HMODULE hDLL = LoadLibrary((LPCWSTR)„c:\windows\system32\user32.dll“);

Jedoch bleibt das Handle nach Aufruf der Funktion LoadLibrary immer NULL. Der Pfad zu der o. g. DLL ist definitiv richtig. Auch habe ich diese DLL schon in den DEBUG Ordner von VS2005 kopiert. Jedoch findet er die DLL auch dann nicht. Kann mir jemand von euch vielleicht verraten wie ich die DLL erfolgreich geladen bekomme?

Moin,

  1. Solltest du den System32 Pfad aus dem System Lesen , besser ist.

    // PATH TO SYSTEM
    HWND hwndOwner = NULL;
    char szPath[MAX_PATH];
    szPath[0]=’\0’;
    int nFolder=CSIDL_SYSTEM; // Sytem32 Fodler
    BOOL fCreate = 0; // no folder creation
    BOOL bErgeb = SHGetSpecialFolderPath(hwndOwner,szPath,nFolder,fCreate);
    CString szTheDll = _T("");
    szTheDll.Format("%s", szPath);
    szTheDll +="\user32.dll";

Dann auch alle Handles damit das Modul leben kann :smile:

// LOAD LIBRARY
 HANDLE m\_hHandle = NULL;;
 HMODULE m\_hModule = NULL;;
 if (m\_hModule == NULL) {
 m\_hModule = LoadLibraryEx(szTheDll,m\_hHandle,NULL);

 if (m\_hModule == NULL) 
 { 
 TRACE("\nCANT LOAD");
 FreeLibrary(m\_hModule);
 return false;
 }
 else
 {
 TRACE("\nLOADED LIBARY");
 // Beispiel eines Loads Syntax Modul
 // funcname\_name = (TYPEfuncName) GetProcAddress(m\_hModule,"funcName");
 // func\_uid = (TYPEfuncID) GetProcAddress(m\_hModule,"funcUid");
 }
 }
 // user32\_funct\_name(pName);

-)
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Es kann bei LoadLibrary auch trotz gefunden ein NULL zurückkomen.

LoadLibrary versucht, die DLL mit Hilfe derselben Suchfolge aufzufinden, die für die implizite Verknüpfung verwendet wird. Wenn das System die DLL nicht finden kann oder die Einsprungpunktfunktion den Wert FALSE zurückgibt, gibt LoadLibrary den Wert NULL zurück. Wenn im Aufruf von LoadLibrary ein DLL-Modul angegeben ist, das bereits im Adressraum des aufrufenden Prozesses zugeordnet ist, gibt die Funktion einfach ein Handle für die DLL zurück und erhöht den Verweiszähler des Moduls.

Wegen der automatischen Einstiegsfunktion.

Deswegen LoadLibraryEx damit die Einstiegsfunktion nicht automatisch abgefragt wird.

Hallo RakonDark,

Danke für deine Hilfe.

Habe mein Problem jetzt wie folgt lösen können:

#include

int main(void)
{
HMODULE hDLL = LoadLibrary(_T(„DLL.dll“));
}

Da meine Applikation standardmäßig mit Unicode Unterstützung kompiliert wird, muss man das _T Makro verwenden um den ASCII String in einen Unicode String zu konvertieren. Das _T Makro ist in der Headerdatei „TCHAR.H“ deklariert. Alternativ kann man die Applikation natürlich auch ohne Unicode Unterstützung kompilieren. Dazu muss man bei VS2005 unter „Project-&gt:stuck_out_tongue_winking_eye:roject Properties->Configuration Properties->General“ den Schalter „Character Set“ von „Use Unicode Character Set“ auf „Not Set“ setzen.

Tja die Grundlagen sollte man schon beachten.
Unicode compiliert ist was ganz anderes .