2017-11-20 3 views
0

Der folgende Code lädt eine DLL in Laufzeit mithilfe von LoadLibrary().WinAPI-Funktion LoadLibrary() verursacht Funktion fehlgeschlagen während Ausführungsfehler

boolean Load_Internals_dll() 
{ 
    boolean result = true; 

    //LOG_INIT; 
    HINSTANCE hApexRLIO = LoadLibrary(L"APEX_RLIO_Internals.dll"); 

    printf("Checking getlasterror after loadlibrary:\n",GetLastError()); 
    if(NULL == hApexRLIO) 
    { 
     result = false; 
     printf("[ERR]: Unable to load dll\n"); 
     LOG_PRINT(" [ERR]: Unable to load dll.\n"); 

    } 
    result = InitRSIDComm_Lib_Func(); 
    //LOG_EXIT; 
    return result; 
} 

Nachdem die DLL laden, wird der Griff hApexRLIO zu sein, nicht null, aber die Funktion GetLastError() gibt Systemfehlercode 1627 (während der Ausführung Funktion nicht) gefunden.

Was könnten die möglichen Ursachen für diesen Fehler sein?

Es gibt nicht viel Dokumentation für diesen Fehlercode im Web, VC++ zehn Gallonen Köpfe bitte helfen Sie mir, dies zu lösen.

+4

Die Funktion ist erfolgreich, da der zurückgegebene Handle-Wert nicht null ist, sodass der von "GetLastError" zurückgegebene Wert überhaupt nicht relevant zu sein scheint. – VTT

+0

Mögliches Duplikat von: https://stackoverflow.com/questions/41122518/loadlibrary-failing-with-error-code-1627error-function-failed – FloIsAwsm

+1

Rufen Sie 'GetLastError' nicht auf, es sei denn, Sie haben einen Fehler. –

Antwort

5

The documentation sagt:

Wenn die Funktion der Rückgabewert ein Handle für das Modul erfolgreich ist, ist. Wenn die Funktion fehlschlägt, lautet der Rückgabewert NULL. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError.

Wenn die Funktion erfolgreich ausgeführt wird, lautet der Rückgabewert nicht NULL. Dies ist dein Szenario. Die Dokumentation gibt kein Versprechen, was GetLastError zurückgibt, wenn die Funktion erfolgreich ist. Einige Win32-API-Funktionen rufen vor der Rückgabe SetLastError(ERROR_SUCCESS) auf, aber nicht alle. Dies ist einer, der das nicht tut.

Mit anderen Worten, es gibt keinen Fehler. Der Funktionsrückgabewert zeigt Erfolg an, und Sie sollten GetLastError nicht aufrufen, da der zurückgegebene Wert bedeutungslos ist.

+2

Sie können nicht einmal garantieren, dass der letzte Fehler bei Erfolg nicht geändert wird, wenn Sie SetLastError (ERROR_SUCCESS) explizit aufrufen, bevor Sie einen Anruf tätigen. – SoronelHaetir

Verwandte Themen