没有“windows.h”的GetProcessIdOfThread

时间:2013-01-25 20:46:43

标签: c++ windows visual-studio winapi

我需要手动设置线程的优先级,并使用GetProcessIdOfThread执行此操作。不幸的是,第三方库要求我将代码构建为Use MFC in a Shared DLL,以便我可以使用afx.h来获取某些dll技巧。

如何在没有GetProcessIdOfThread的情况下使用windows.h等功能?

我试图包含WinBase.h,但这会引发很多废话,编译错误。

2 个答案:

答案 0 :(得分:4)

如果您的下游链接器设置正确,您只需将函数声明添加到您选择的项目头文件中。

以下是WinBase.h中的原始声明:

WINBASEAPI DWORD WINAPI GetProcessIdOfThread(HANDLE Thread);

如果您不包含Windows.h,那么您将不会拥有该特定声明所需的大多数已使用的预处理器宏/定义。如果您要链接到CRT的静态库版本,则这是等效的定义:

unsigned long __stdcall GetProcessIdOfThread(void *Thread);

如果您要链接CRT的DLL版本,则需要在声明前添加__declspec(dllimport)

__declspec(dllimport) unsigned long __stdcall GetProcessIdOfThread(void *Thread);

答案 1 :(得分:4)

我会将一个包装函数放在一个单独的.c(pp)文件中来解决这个问题:

 #include <windows.h>


 DWORD GetPidFromThread(HANDLE thread)
 {
     return GetProcessIdOfThread(thread);
 }

您可能仍需要将DWORDHANDLE替换为您可以在其他文件中使用的某些类型[并使用GetPidFromThread的原型生成头文件,但至少你可以合理安全地隔离这些位。