使用psapi.h在Microsoft Visual C ++ 6.0中编译exe

时间:2010-12-30 06:21:15

标签: c++ visual-c++

我一直在尝试使用psapi.h库在Microsoft Visual C ++ 6.0中编译exe,但我不断收到此错误;

fatal error C1083: Cannot open include file: 'psapi.h': No such file or directory Error executing cl.exe.

我浏览了整个互联网,发现很多帖子指示我下载并安装Windows SDK版本。然而,所有这些链接都已死亡。如果任何人都可以通过配置Microsoft Visual C ++ 6.0来使我可以使用psapi.h进行编译,那就太棒了!

4 个答案:

答案 0 :(得分:1)

直接从microsoft获取windows或platform sdk,它们不应该有任何死链接。如果做不到这一点,请下载Visual Studio 08或更高版本,看它是否安装了lib&标题(我和你有完全相同的问题,我通过从Visual Studio 2008附带的windows sdk复制lib和标题来解决它)。

答案 1 :(得分:0)

如果VC ++ 6.0附带的SDK中不包含psapi.h,那么您应该更新编译器,尝试使用旧的工具链的新SDK。在 VC ++ 6.0之后发布的Windows版本支持PSAPI。

无论哪种方式,头文件本身都无法解决您的问题;您还需要适当的导出库和DLL。

答案 2 :(得分:0)

最新版本的Platform SDK与Visual C ++ 6.0不兼容 - 几年前支持该编译器。如果你没有获得SDK,那么我恐怕你运气不好。微软并不害怕过时的东西并彻底消除它们。

答案 3 :(得分:0)

这对我有用:

/*
 * Simple utility to call GetProcessMemoryInfo without having 
 * to compile or link with psapi.h / psapi.lib.
 */

typedef struct {
   DWORD cb;
   DWORD PageFaultCount;
   DWORD PeakWorkingSetSize;
   DWORD WorkingSetSize;
   DWORD QuotaPeakPagedPoolUsage;
   DWORD QuotaPagedPoolUsage;
   DWORD QuotaPeakNonPagedPoolUsage;
   DWORD QuotaNonPagedPoolUsage;
   DWORD PagefileUsage;
   DWORD PeakPagefileUsage;
} PROCESS_MEMORY_COUNTERS;

#define Win32MemArgs HANDLE, PROCESS_MEMORY_COUNTERS *, DWORD

extern BOOL WINAPI GetProcessMemoryInfo( Win32MemArgs );

typedef BOOL (WINAPI *GetMemInfo)( Win32MemArgs );

PROCESS_MEMORY_COUNTERS GetMemInfo()
{
    PROCESS_MEMORY_COUNTERS pmc;
    HANDLE                  hProc;
    char                   *pf;
    BOOL                    bOK;
    static HINSTANCE        _hLib = (HINSTANCE)0;
    static GetMemInfo       _fcn  = (GetMemInfo)0;

    /*
     * Dynamically Load library (once)
     */
    if ( !_hLib && (_hLib=::LoadLibrary( "psapi.dll" )) ) {
        pf   = "GetProcessMemoryInfo";
        _fcn = (BOOL (WINAPI *)( Win32MemArgs ))::GetProcAddress( _hLib, pf );
    }

    /*
     * Call fcn
     */
    bOK = FALSE
    if ( _fcn && (hProc=::GetCurrentProcess()) )
        bOK = (*_fcn)( hProc, &pmc, sizeof( pmc ) );
    }
    if ( !bOK )
       memset( &pmc, 0, sizeof( pmc ) );
    return pmc;
}