2015-05-04 257 views
2

這是我在stdafx.h中代碼:'GetProcessIdOfThread':標識符找不到

// stdafx.h : include file for standard system include files, 
// or project specific include files that are used frequently, but 
// are changed infrequently 
// 

#pragma once 

#define _WIN32_WINNT 0x0502 

#include "winsock2.h" 
#include "windows.h" 
#include "stdio.h" 
#include "Iphlpapi.h" 
#include <psapi.h> 
#include "Ntsecapi.h" 
#include "txdtc.h" 
#include "xolehlp.h" 
#include <iostream> 
#include <tchar.h> 

// TODO: reference additional headers your program requires here 

正如你看到的我已經包含了 「WINDOWS.H」

這裏是主代碼:

#include "stdafx.h"  
... 
if (hThread && dwRpcssPid == GetProcessIdOfThread(hThread)) 
... 

我的錯誤是:

'GetProcessIdOfThread':標識符找不到

智能感知:標識符 「GetProcessIdOfThread」 未定義

我怎樣才能解決這些錯誤?

+1

難道只是* *智能感知錯誤?如果是這樣,那麼你可以忽略它。除此之外,你不會在'stdafx.h'的同一目錄下有一個名爲'windows.h'的文件,是嗎?或者,是否在'GetProcessIdOfThread()'的相同文件*中添加'#include '去除錯誤? – Biffen

+0

很抱歉,請查看我的問題。 – MoonLight

回答

5

該功能不適用於_WIN32_WINNT值小於0x0600也可能是_WIN32_WINNT_VISTA。如果您改變了這樣的代碼,你會得到它的工作:

//#define _WIN32_WINNT 0x0502 
#define _WIN32_WINNT 0x0600 

功能是因爲Vista的面世,針對Vista的+,你應該有分別定義了這個值。

要使用當前SDK定位最新版本的API,只需包含SDKDDKVer即可。H和這些值會爲你定義/

//#define _WIN32_WINNT 0x0502 
#include <SDKDDKVer.h> 

參見:

+0

感謝所有的答案,但是這個解決了我的問題。 – MoonLight

+0

R我如何與你聊天? – MoonLight

+0

@MoonLight:沒有聊天,但您可以在我的個人資料的網站上找到電子郵件地址。 –

1

如果您使用的是Windows 8,你需要包括:Processthreadsapi.h

看到標題部分MSDN引用。

+0

我正在使用Windows 7 - 我已經添加了這一行:#include「Processthreadsapi.h」,但該錯誤仍然存​​在! – MoonLight

+0

hThread的類型是什麼?它是一個std ::線程? – MaxVerro

+0

HANDLE hThread = OpenThread(THREAD_ALL_ACCESS,TRUE,Tid); – MoonLight

2

GetProcessIdOfThread的平臺要求規定:

Windows Vista中[桌面應用程序僅] [只有桌面應用程序]

Windows Server 2003的

和標題的要求規定:

Windows 8和Windows上的Processthreadsapi.h Server 2012中

所以:

  1. 確保Windows SDK達最新
  2. 確保您指定的platform requirements properly
  3. 確保你包含正確的頭文件。