我的程序如下
#include "stdafx.h"
#include "windows.h"int main(int argc, char* argv[])
{
CreateJobObject(NULL,NULL);
return 0;
}
编译后提示如下:
E:\ErrorShow\TestObject\TestObject.cpp(9) : error C2065: 'CreateJobObject' : undeclared identifier
我查看了winbase.h头文件,发现下面有
CreateJobObject函数的定义,不知道是怎么回事?
我的sdk是昨天刚刚下完的,如何将和将那些新的头文件放到vc++下

解决方案 »

  1.   

    #defien _WIN32_WINNT  0x0500
      

  2.   

    #define _WIN32_WINNT  0x0500
    上面的意思是说在NT下运行的条件,跟编译有关系吗?
      

  3.   

    #if (_WIN32_WINNT >= 0x0500)
    //
    // Very Large Memory API Subset
    //WINBASEAPI
    PVOID64
    WINAPI
    VirtualAllocVlm(
        HANDLE hProcess,
        PVOID64 lpAddress,
        DWORDLONG ullSize,
        DWORD flAllocationType,
        DWORD flProtect
        );WINBASEAPI
    BOOL
    WINAPI
    VirtualFreeVlm(
        HANDLE hProcess,
        PVOID64 lpAddress,
        DWORDLONG ullSize,
        DWORD dwFreeType
        );WINBASEAPI
    BOOL
    WINAPI
    VirtualProtectVlm(
        HANDLE hProcess,
        PVOID64 lpAddress,
        DWORDLONG ullSize,
        DWORD flNewProtect,
        PDWORD lpflOldProtect
        );WINBASEAPI
    DWORD
    WINAPI
    VirtualQueryVlm(
        HANDLE hProcess,
        PVOID64 lpAddress,
        PMEMORY_BASIC_INFORMATION_VLM lpBuffer,
        DWORD dwLength
        );typedef struct _MEMORYSTATUSVLM {
        DWORD dwLength;
        DWORD dwMemoryLoad;
        DWORDLONG ullTotalPhys;
        DWORDLONG ullAvailPhys;
        DWORDLONG ullTotalPageFile;
        DWORDLONG ullAvailPageFile;
        DWORDLONG ullTotalVirtual;
        DWORDLONG ullAvailVirtual;
        DWORDLONG ullAvailExtendedVirtual;
    } MEMORYSTATUSVLM, *LPMEMORYSTATUSVLM;WINBASEAPI
    VOID
    WINAPI
    GlobalMemoryStatusVlm(
        LPMEMORYSTATUSVLM lpBuffer
        );WINBASEAPI
    BOOL
    WINAPI
    ReadProcessMemoryVlm(
        HANDLE hProcess,
        PVOID64 lpBaseAddress,
        PVOID64 lpBuffer,
        DWORD nSize,
        LPDWORD lpNumberOfBytesRead
        );WINBASEAPI
    BOOL
    WINAPI
    WriteProcessMemoryVlm(
        HANDLE hProcess,
        PVOID64 lpBaseAddress,
        PVOID64 lpBuffer,
        DWORD nSize,
        LPDWORD lpNumberOfBytesWritten
        );WINBASEAPI
    BOOL
    WINAPI
    ReadFileVlm(
        HANDLE hFile,
        PVOID64 lpBuffer,
        DWORD nNumberOfBytesToRead,
        LPDWORD lpReserved,
        LPOVERLAPPED lpOverlapped
        );WINBASEAPI
    BOOL
    WINAPI
    WriteFileVlm(
        HANDLE hFile,
        PVOID64 lpBuffer,
        DWORD nNumberOfBytesToWrite,
        LPDWORD lpReserved,
        LPOVERLAPPED lpOverlapped
        );WINBASEAPI
    HANDLE
    WINAPI
    CreateJobObjectA(
        LPSECURITY_ATTRIBUTES lpJobAttributes,
        LPCSTR lpName
        );
    WINBASEAPI
    HANDLE
    WINAPI
    CreateJobObjectW(
        LPSECURITY_ATTRIBUTES lpJobAttributes,
        LPCWSTR lpName
        );
    #ifdef UNICODE
    #define CreateJobObject  CreateJobObjectW
    #else
    #define CreateJobObject  CreateJobObjectA
    #endif // !UNICODE你看到前面那个
    #if (_WIN32_WINNT >= 0x0500)
    了吗?
      

  4.   

    #include "stdafx.h"
    #include "windows.h"
    #define _WIN32_WINNT  0x0500int main(int argc, char* argv[])
    {

    #if (_WIN32_WINNT>=0x0500)
    CreateJobObject(NULL,NULL);
    #endif
    return 0;
    }还是这样的错误:
    E:\ErrorShow\TestObject\TestObject.cpp(12) : error C2065: 'CreateJobObject' : undeclared identifier
    Error executing cl.exe.
      

  5.   

    #define _WIN32_WINNT  0x0500放到stdafx.h里去,而且在windows.h之前。
      

  6.   

    感谢sevencat(七猫)的解答,感谢nightsuns(nightsuns)的指点