LoadLibrary失败,GetLastError返回127 (找不到指定的程序)

LoadLibrary失败,GetLastError返回127 (找不到指定的程序)
    在Windows 2000下调试程序时,碰到一个问题:在导入一个win32 DLL时,LoadLibrary()函数返回值为空,GetLastError返回值为127 (找不到指定的程序)。其他DLL文件调用都正常。最后发现这个DLL文件中一个API函数WTSGetActiveConsoleSessionId()不支持2000系统,所以导致DLL文件总是导入不成功。
    加载dll失败,原因大致有:
    1.dll初始化时失败,这是因为dll本身有问题;
    2.dll需要的其他dll文件不存在;
    3.调用的dll再本地机器上不存在。
    
    解决方案: 用动态加载的方式
   
 1  typedef DWORD (WINAPI  * LoadWTSGetActiveConsoleSessionId)(VOID);
 2 
 3              HMODULE hModKrl   =   LoadLibrary(TEXT( " Kernel32.dll " ));
 4               if  ( ! hModKrl)  
 5              {  
 6                  LOG( " 导入 kernel32.dll 失败 " );
 7                   return ;
 8              }  
 9 
10              LoadWTSGetActiveConsoleSessionId fWTSGetActiveConsoleSessionId   =   (LoadWTSGetActiveConsoleSessionId)GetProcAddress(hModKrl,  " WTSGetActiveConsoleSessionId " );
11               if  ( ! fWTSGetActiveConsoleSessionId)
12              {
13                  LOG( " 调用WTSGetActiveConsoleSessionId 失败 " );
14                   return ;
15              } 
16              dwSessionId  =  fWTSGetActiveConsoleSessionId();
17 
18               if  (hModKrl)  
19              {  
20                  FreeLibrary(hModKrl);  
21              }
    使用动态加载dll,在Windows2000系统下成功,但获取WTSGetActiveConsoleSessionId函数入口地址失败。查找msdn发现此函数不支持2000系统。

   Requirements     

Minimum supported client

Windows XP

   Minimum supported server

Windows Server 2003

   Header

Winbase.h (include Windows.h)

   Library

Kernel32.lib

   DLL

Kernel32.dll
      

你可能感兴趣的:(LoadLibrary失败,GetLastError返回127 (找不到指定的程序))