2016-12-13 148 views
-4

我想調用LoadLibrary的DLL放置在EXE路徑。 它給錯誤ERROR_FUNCTION_FAILED。下面是代碼,請讓我知道1627LoadLibrary(...)失敗,錯誤代碼1627:ERROR_FUNCTION_FAILED

typedef int (__stdcall *func)(); 
    int DynamicLoad_Lib() 
    { 
     func call; 
     int iReturn; 
     cout<<"\n\n DynamicLoad_Lib \n\n"; 
     HINSTANCE hinstLib = LoadLibrary(L"MYLib.dll"); 
     cout<<"\n\nGetLastError() "<<GetLastError()<<"\n";    
     if(hinstLib == NULL) 
      return 0; 
     call = (func_another)GetProcAddress(hinstLib, "Initialize"); 
     if(call == NULL) 
     { 
      FreeLibrary(hinstLib); 
      return 0; 
     } 
     iReturn = (*call)(); 
     call = (func)GetProcAddress(hinstLib, "Terminate"); 
     if(call == NULL) 
     { 
      FreeLibrary(hinstLib); 
      return 0; 
     } 
     FreeLibrary(hinstLib); 
     return 1; 
    } 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    DynamicLoad_Lib(); 
    return 0; 
} 
+0

'func_another'沒有在任何地方定義,爲什麼它不是'func'?發佈真實的代碼。 – PaulMcKenzie

+0

您正在調用GetLastError(),但是您不知道LoadLibrary實際上是否在此時失敗。請將您的GetLastError調用放在'if(hinstLib == NULL)' – nos

+0

正文內。感謝您的回覆,它是複製粘貼錯誤。錯誤發生在cout之前<<「\ n \ nGetLastError()」<< GetLastError()<<「\ n」; – user2890924

回答

0

這將打印在任何Windows API函數發生的最後一個錯誤原因:

cout<<"\n\nGetLastError() "<<GetLastError()<<"\n";    
    if(hinstLib == NULL) 
     return 0; 

應該是打印在發生任何錯誤LoadLibrary函數:

if(hinstLib == NULL) 
    { 
     cout<<"\n\nGetLastError() "<<GetLastError()<<"\n";    
     return 0; 
    } 

LoadLibrary RTFM

返回值

如果函數成功,則返回值是模塊的句柄。

如果函數失敗,則返回值爲NULL。要獲得擴展錯誤 信息,請調用GetLastError。

+0

@ user2890924如果(hinstLib == NULL)不正確,您的程序仍然會打印一條錯誤消息。 – Lundin

+0

@ user2890924是的。那麼,LoadLibrary確實成功了嗎?請注意,無論你想要什麼,都不能只是GetLastError,並期望它告訴你一些明智的東西。 – nos

+0

您一次調用'GetLastError',其中沒有記錄以產生有意義的值。 GetLastError必須立即被**調用,一旦條件被輸入,它返回一個有意義的結果,中間沒有代碼。 – IInspectable

相關問題