2

XP SP3 仮想マシン上にコードが存在する C++ プロジェクトを継承しました (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 が認識されていないことと関係があると思いますが、C++ を 15 年も使っていないので、どこから始めればよいかわかりません。

何か案は?

解決

多くの人がこのソリューションに興味を持っているとは思いませんが、それでもここにあります!

ようやくMicrosoft ダウンロード センターで"Windows Server 2003 SP1 SDK" を見つけました(SDK の完全なリストはWikipediaで入手できます)。次に、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 Edition は無料でダウンロードできます)。

于 2015-06-22T15:56:30.973 に答える