Visual Studio 6.0 C ++ GlobalMemoryStatusEx(需要旧SDK)

时间:2015-06-22 15:33:56

标签: c++ sdk visual-studio-6 platform-sdk

我继承了一个C ++项目,其代码存在于XP SP3虚拟机上(yay)。

出于某种原因,即使包含了afxwin.h(并且我包含了winbase.h),当我编译应用程序时,我得到了一堆错误,根本是:

error C2065: 'MEMORYSTATUSEX' : undeclared identifier
error C2065: 'GlobalMemoryStatusEx' : undeclared identifier

我在MSDN上找到了结构定义,因此解决了我的问题的一部分(尽管这是在winbase中定义的,但由于某些原因它没有通过)。

typedef struct _MEMORYSTATUSEX {
  DWORD     dwLength;
  DWORD     dwMemoryLoad;
  DWORDLONG ullTotalPhys;
  DWORDLONG ullAvailPhys;
  DWORDLONG ullTotalPageFile;
  DWORDLONG ullAvailPageFile;
  DWORDLONG ullTotalVirtual;
  DWORDLONG ullAvailVirtual;
  DWORDLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;

但这仍然让我遇到了GlobalMemoryStatusEx的问题。我尝试将函数定义放在标题中,然后给出了一个未解析的外部符号错误。

WINBASEAPI BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpBuffer);

error LNK2001: unresolved external symbol "__declspec(dllimport) int __stdcall GlobalMemoryStatusEx(struct _MEMORYSTATUSEX *)" (__imp_?GlobalMemoryStatusEx@@YGHPAU_MEMORYSTATUSEX@@@Z)

Kernel32.lib包含在编译器命令中,所以我不确定为什么这不起作用。我想也许这个功能已被弃用,但是我可以让它在Windows 7机器上的VS2013中运行得很好,所以不是这样。我认为这与winbase没有得到认可这一事实有关,但我15年来没有使用过C ++,所以我不确定从哪里开始。

有什么想法吗?

我怀疑很多人对这个解决方案很感兴趣,但是在这里它仍然存在!

我终于找到了“Windows Server 2003 SP1 SDK”in the Microsoft download center(可以获得完整的SDK列表on Wikipedia)。然后,我必须将目录添加到VS6.0中的Tools->选项,并将它们移动到列表的顶部。

最后,我看到了PROGRAM.exe - 0 error(s)

Options Menu

1 个答案:

答案 0 :(得分:2)

您应该安装一个在VC 6之后发布的SDK,它足够新,可以包含GlobalMemoryStatusEx但已经足够使用VC 6了。

VC 6附带的SDK太旧,无法包含GlobalMemoryStatusEx

或者,在我看来更好的方法:升级到更新的Visual Studio版本(Visual Studio Express Editions可以免费下载。)。