2

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

出于某种原因,即使包含了 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++,所以我不确定从哪里开始。

有任何想法吗?

解决方案

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

我终于在 Microsoft 下载中心找到了“Windows Server 2003 SP1 SDK” (可在 Wikipedia 上找到完整的 SDK 列表)。然后我不得不将目录添加到 VS6.0 中的 Tools->Options,并将它们移动到列表的顶部。

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

选项菜单

4

1 回答 1

2

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

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

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

于 2015-06-22T15:56:30.973 回答