冒险伴侣吧 关注:12,673贴子:172,060
  • 4回复贴,共1

求解XP 系统 怎么解决 DLL 问题

取消只看楼主收藏回复

XP系统,换系统太麻烦了。
现在安装了所有VC运行库,还是mycheck.dll报错,
The procedure entry point K32GetProcessImagefileNameW could not be located in the dynamic link library KERNEL32.dll


IP属地:江苏1楼2016-08-09 14:47回复
    正常启动游戏没问题,这个明显是伴侣的问题。重装系统太麻烦,不值得。
    我想用XP的应该也不少,有没有大神用XP能解决这个问题的?


    IP属地:江苏4楼2016-08-09 15:16
    收起回复
      中文版本的就是:无法定位程序输入点K32EnumProcessModules于动态链接库KERNEL32.dll上。这样的错误提示一般会出现在非 Windows7 或者 Windows Server 2008 R2 的系统上面。
      下面我解释下为什么会出现这样的错误。因为一些性能的问题,在Windows7 和 Windows Server 2008 R2 系统上,微软把一些API函数从Psapi.dll 移到了 Kernel32.dll 动态库中,并在VS2010编译器自带的 WinSDK v7.0版本上面做了处理。这样的设计在Windows7 和 Windows Server 2008 R2系统上面没有问题,但是如果你用vs2010编译的程序运行在Win7之前的系统上,那么肯定会遇到刚才说的错误。因为老系统的KERNEL32.dll中根本没有那些被移植过去的函数,所以肯定会执行失败。


      IP属地:江苏7楼2016-08-09 18:04
      回复
        受影响的函数如下:
        //Snapshot from Psapi.lib – WinSDK V7.0*
        #if (PSAPI_VERSION > 1)
        #define EnumProcesses K32EnumProcesses
        #define EnumProcessModules K32EnumProcessModules
        #define EnumProcessModulesEx K32EnumProcessModulesEx
        #define GetModuleBaseNameA K32GetModuleBaseNameA
        #define GetModuleBaseNameW K32GetModuleBaseNameW
        #define GetModuleFileNameExA K32GetModuleFileNameExA
        #define GetModuleFileNameExW K32GetModuleFileNameExW
        #define GetModuleInformation K32GetModuleInformation
        #define EmptyWorkingSet K32EmptyWorkingSet
        #define QueryWorkingSet K32QueryWorkingSet
        #define QueryWorkingSetEx K32QueryWorkingSetEx
        #define InitializeProcessForWsWatch K32InitializeProcessForWsWatch
        #define GetWsChanges K32GetWsChanges
        #define GetWsChangesEx K32GetWsChangesEx
        #define GetMappedFileNameW K32GetMappedFileNameW
        #define GetMappedFileNameA K32GetMappedFileNameA
        #define EnumDeviceDrivers K32EnumDeviceDrivers
        #define GetDeviceDriverBaseNameA K32GetDeviceDriverBaseNameA
        #define GetDeviceDriverBaseNameW K32GetDeviceDriverBaseNameW
        #define GetDeviceDriverFileNameA K32GetDeviceDriverFileNameA
        #define GetDeviceDriverFileNameW K32GetDeviceDriverFileNameW
        #define GetProcessMemoryInfo K32GetProcessMemoryInfo
        #define GetPerformanceInfo K32GetPerformanceInfo
        #define EnumPageFilesW K32EnumPageFilesW
        #define EnumPageFilesA K32EnumPageFilesA
        #define GetProcessImageFileNameA K32GetProcessImageFileNameA
        #define GetProcessImageFileNameW K32GetProcessImageFileNameW
        #endif
        通过上面的解释,你应该明白为什么出现那样的错误了吧?也大体上知道怎么样改正这个错误了。不知道大家注意到没有,有个条件判断#if (PSAPI_VERSION > 1),也就是说只有当PSAPI_VERSION被定义为大于1的数值时才有这样的问题,所以解决方案就是将 PSAPI_VERSION 定义为小于等于1的数值就可以啦,如下:
        #define PSAPI_VERSION 1


        IP属地:江苏8楼2016-08-09 18:05
        回复
          求大神,怎么设置 PSAPI_VERSION 定义为小于等于1的数值


          IP属地:江苏9楼2016-08-09 18:06
          回复