在XP系统上出现无法定位程序输入点 K32GetProcessMemoryInfo的解决方案

VC2012升级补丁5.0之后,编译出来的程序发现在XP系统无法定位程序输入点 K32GetProcessMemoryInfo于动态链接库kernel32.dll之上。

之前程序一直在XP上安装正常,今天测试组的同事突然发现,新发布的版本不能在XP上使用,这个问题比较奇怪,因为以往的版本都是没有问题的。为什么会突然出现这个问题呢?一开始就去查找是否所有工程都使用V110_XP来编译,找完所有工程都没出错。最后才想到近来升级VC2012的Update5.0的补丁,再打包编译之后,才发现XP的电脑不能使用了。

经过查找分析,发现是如下问题:

这是由于GetProcessMemoryInfo在不同系统版本号不同导致的,官方说明如下:

Remarks
Starting with Windows 7 and Windows Server 2008 R2, Psapi.h establishes version numbers for the PSAPI functions. The PSAPI version number affects the name used to call the function and the library that a program must load.
If PSAPI_VERSION is 2 or greater, this function is defined as K32GetProcessMemoryInfo in Psapi.h and exported in Kernel32.lib and Kernel32.dll. If PSAPI_VERSION is 1, this function is defined as GetProcessMemoryInfo in Psapi.h and exported in Psapi.lib and Psapi.dll as a wrapper that calls K32GetProcessMemoryInfo.
Programs that must run on earlier versions of Windows as well as Windows 7 and later versions should always call this function as GetProcessMemoryInfo. To ensure correct resolution of symbols, add Psapi.lib to the TARGETLIBS macro and compile the program with -DPSAPI_VERSION=1. To use run-time dynamic linking, load Psapi.dll.

解决方案如下:

只需要在#include <psapi.h>引用前添加

代码如下:

#ifndef PSAPI_VERSION
#define PSAPI_VERSION 1
#endif
#include <psapi.h>
#pragma  comment(lib,"Psapi.lib")

看来微软已经不支持XP系统了,因此所有发布的新版本软件已经不再测试XP的兼容性了。看来明年,也需要转向不支持XP系统了,否则需要投入的测试成本和维护成本急剧上升中,需要全面转向WIN7和WIN10系统的支持。有此可见,生态系统就是这么重要的事情,可以左右大局。

(0)

相关推荐

  • 在XP系统上出现无法定位程序输入点 K32GetProcessMemoryInfo的解决方案

    VC2012升级补丁5.0之后,编译出来的程序发现在XP系统无法定位程序输入点 K32GetProcessMemoryInfo于动态链接库kernel32.dll之上. 之前程序一直在XP上安装正常,今天测试组的同事突然发现,新发布的版本不能在XP上使用,这个问题比较奇怪,因为以往的版本都是没有问题的.为什么会突然出现这个问题呢?一开始就去查找是否所有工程都使用V110_XP来编译,找完所有工程都没出错.最后才想到近来升级VC2012的Update5.0的补丁,再打包编译之后,才发现XP的电脑不

  • macOS上使用gperftools定位Java内存泄漏问题及解决方案

    这几天在排查一个堆外内存泄漏的问题时看到很多人都提到了gperftools这个神器,想要尝试一下结果发现它对macOS的支持不太友好.而且大多数教程是针对C++的,里面的一通编译链接的操作看得我个Java仔眼花缭乱的.所以我在这里整理一份mac和Java版的使用教程,免得大家再来踩坑了. 一.简介 gperftools是google提供的一套分析工具,包括堆内存检测heap-profiler,内存泄漏分析工具heap-checker和CPU性能监测工具cpu-profiler.众所周知堆外内存的

  • 重装Windows XP系统的方法

    这几年来为解决在Windows系统身上所出现的各种各样的毛病,PC World曾公布过数以百计种解决方案,但是在某些情况下所遭遇的问题,只有进行一次完全的重新安装操作才能搞定,这里就介绍一下如何重装Windows XP. 首先,找到你购买PC机时附送的Windows系统光盘,以及其它应用程序的安装光盘,假如你已经下载有杀毒,防火墙或其它一些工具程序,可以将它们拷贝至一张数据光盘或其它类型的可移动存储媒介中.(假如你的操作系统安装程序不是以光盘形式存在,那么重装系统所需文件也可以被预先放置在硬盘当

  • Windows XP系统注册表十则设置技巧

    用XP已经好久了,本人试验和整理了许多很有意思的注册表修改技巧,这里写出来给大家参考.说到注册表修改,有一句话总是不得不提:小心谨慎.修改之前必须备份,一步失误可能让你的机器翻脸不认人.在下面的叙述中,如果指定位置没有这里所说的键/值,那么你得自己新建一个.除非特别说明,所有这里谈到的值都是REG_DWORD类型. 一.提高XP的响应速度 找到HKEY_CURRENT_USERControl PanelDesktop子键,修改HungAppTimeout值.HungAppTimeout值表示系统

  • 通过关闭10种服务 提高Windows XP系统安全性的图文教程

    提高系统安全性涉及到许多方面,其中重要的一步是关闭不必要的服务.虽然微软的Windows XP不是网络操作系统,但默认情况下它拥有的不少服务是打开的.对于一位清醒的微软用户而言,关闭一些不需要的服务是一个保障安全性的重要方面. 当然,每一个Windows版本都提供了不同的服务,因此,为安全目的而在一种系统中禁用的服务可能仅适用于一个特定版本.因此本文所讨论的服务列表可能仅适用于XP的特定版本.不过,本文所讨论的内容却可以为用户检查其它系统上的服务提供指南. 1.IIS:微软的互联网信息服务(II

  • Windows 2012 r2系统上安装IIS 8.0的方法(图文)

    Windows 2012及其自带的IIS 8.0是微软公司新一代的Web服务器软件,和老版本的IIS相比,有很多破天荒的新功能.随着微软宣布不再支持Windows XP操作系统,XP系统对应的服务器版本Windows 2003连同IIS 6.0一起,都面临着被市场淘汰的风险.本文用图文并茂的方式,指导大家如何一步步地安装IIS 8.0.下面的安装步骤也同样适用于Windows 2012 R2,但是和Windows 8/8.1的安装界面有所不同. 1.打开桌面左下角的"服务器管理器".

  • Windows XP系统安全技巧

    大家使用WindowsXP已经有很长一段时间了,对与WindowsXP操作系统已经是非常熟悉了吧!有没有总结出一些的经验来与大家共享呢?下面笔者就把在使用WindowsXP操作系统过程中积累的一些经验共享出来,也便能让你在使用WindowsXP操作系统的过程中能快速上手.熟练的掌握XP的使用技巧就能更好的享受XP系统带给你的强大功能. 1.恢复被破坏的Win XP系统文件 如果Windows XP的系统文件被病毒或其它原因破坏了,我们可以从Windows XP的安装盘中恢复那些被破坏的文件. 具

  • 在WINXP系统上安装SQL Server企业版的方法

    先讲一下注意事项:必须启用"文件和打印共享"才能成功安装MSDE.否则安装进程可能会继续进行直到几乎完成, 然后又意外回滚,无法完成MSDE的安装. 我上次安装失败就是这个原因,平时我总是关闭SERVER服务,也就没有什么共享.顺便提一句,据说你试着把计算机名改成大写字母,那在安装SQL的时候就不会失败了,但是我没验证! XP系统下也可以安装 企业版本 安装办法如下: 一.在SQL服务器的安装盘中找到MSDE这个目录,并且点击setup.exe安装它,过程简单直接下一步就OK了.(这个

  • 在windows 64位操作系统上运行32位的vbscript的方法

    今天在2008 r2 64位的服务器系统上,运行vbs文件的时候如下提示 --------------------------- Windows Script Host --------------------------- 脚本: C:\Users\Administrator\Desktop\vbs_cf.vbs 行: 10 字符: 1 错误: 未找到提供程序.该程序可能未正确安装. 代码: 800A0E7A 源: ADODB.Connection 在2003上运行正常的程序,为什么在08上不

  • Windows XP系统注册表六则设置技巧

    用XP已经好久了,本人试验和整理了许多很有意思的注册表修改技巧,这里写出来给大家参考.说到注册表修改,有一句话总是不得不提:小心谨慎.修改之前必须备份,一步失误可能让你的机器翻脸不认人.在下面的叙述中,如果指定位置没有这里所说的键/值,那么你得自己新建一个.除非特别说明,所有这里谈到的值都是REG_DWORD类型. 一.提高XP的响应速度 找到HKEY_CURRENT_USERControl PanelDesktop子键,修改HungAppTimeout值.HungAppTimeout值表示系统

随机推荐