Visual Studio 6.0 C++ GlobalMemoryStatusEx (необходим старый SDK)

Я унаследовал проект 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 включен в команды компилятора, поэтому я не уверен, почему это не работает. Я подумал, что, возможно, эта функция устарела, но я могу заставить ее прекрасно работать в VS2013 на машине с Windows 7, так что это не так. Я думаю, что это как-то связано с тем фактом, что winbase не распознается, но я не работал с C++ в течение 15 лет, поэтому я не уверен, с чего начать.

Есть идеи?

РЕШЕНИЕ

Я сомневаюсь, что многие люди заинтересованы в решении, но все же оно есть!

Наконец-то я нашел "Windows Server 2003 SP1 SDK" в центре загрузки Microsoft (полный список SDK доступен в Википедии). Затем мне пришлось добавить каталоги в Tools->Options в VS6.0 и переместить их в начало списка.

И наконец, я должен увидеть PROGRAM.exe - 0 error(s)

Меню настроек

1 ответ

Решение

Вам следует установить SDK, выпущенный после VC 6 и достаточно новый, чтобы включать GlobalMemoryStatusEx но достаточно стар, чтобы работать с VC 6.

SDK, поставляемый с VC 6, слишком стар, чтобы включать GlobalMemoryStatusEx,

Или, на мой взгляд, гораздо лучший способ: перейти на более новую версию Visual Studio (более новые версии Visual Studio Express можно скачать бесплатно).

Другие вопросы по тегам