我继承了一个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)
答案 0 :(得分:2)
您应该安装一个在VC 6之后发布的SDK,它足够新,可以包含GlobalMemoryStatusEx
但已经足够使用VC 6了。
VC 6附带的SDK太旧,无法包含GlobalMemoryStatusEx
。
或者,在我看来更好的方法:升级到更新的Visual Studio版本(Visual Studio Express Editions可以免费下载。)。