我继承了一个 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)