Visual Studio 6.0 C++ GlobalMemoryStatusEx(需要旧 SDK)
Visual Studio 6.0 C++ GlobalMemoryStatusEx (Old SDK Needed)
我继承了一个 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 的问题。我尝试将函数定义放在 header 中,然后给了我一个未解析的外部符号错误。
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 (a full list of SDKs is available on Wikipedia)。然后我不得不将目录添加到 VS6.0 中的工具->选项,并将它们移动到列表的顶部。
最后,我看到了PROGRAM.exe - 0 error(s)
您应该安装在 VC 6 之后发布的 SDK,该 SDK 足够新,可以包含 GlobalMemoryStatusEx
但足够旧,可以与 VC 6 一起使用。
VC6 附带的 SDK 太旧,无法包含 GlobalMemoryStatusEx
。
或者,在我看来更好的方法:升级到 Visual Studio 的最新版本(Visual Studio Express Edition 可以免费下载。)。
我继承了一个 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 的问题。我尝试将函数定义放在 header 中,然后给了我一个未解析的外部符号错误。
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 (a full list of SDKs is available on Wikipedia)。然后我不得不将目录添加到 VS6.0 中的工具->选项,并将它们移动到列表的顶部。
最后,我看到了PROGRAM.exe - 0 error(s)
您应该安装在 VC 6 之后发布的 SDK,该 SDK 足够新,可以包含 GlobalMemoryStatusEx
但足够旧,可以与 VC 6 一起使用。
VC6 附带的 SDK 太旧,无法包含 GlobalMemoryStatusEx
。
或者,在我看来更好的方法:升级到 Visual Studio 的最新版本(Visual Studio Express Edition 可以免费下载。)。