我们在使用高版本的Visual Studio编译程序时,或者在64位系统上编译程序后拿到其它Windows下运行时弹出 无法定位程序输入点K32GetModuleFileNameEx于动态链接库KERNEL32.dll的错误。
下面我解释下为什么会出现这样的错误。因为一些性能的问题或者版本升级问题,在Windows7 和 Windows Server 2008 R2 系统上,微软把一些API函数从Psapi.dll 移到了 Kernel32.dll 动态库中,并在VS2010编译器及以上版本自带的 WinSDK v7.0版本上面做了处理。这样的设计在Windows 7 和 Windows Server 2008 R2系统上面没有问题,但是运行到一些低版本的Windows系统上,会弹出这样的错误。因为老系统的KERNEL32.dll中没有那些被移植过去的函数。
为了兼容,所以解决方法就出来了,我们要将版本psapi版本固定,向下兼容。
解决方法 就是 在声明之前加上 PSAPI版本定义。
#ifndef PSAPI_VERSION
#define PSAPI_VERSION 1
#endif
#include <Tlhelp32.h>
#include <Psapi.h>
#pragma comment(lib, "Psapi.lib")