我想使用来自windows.h的CreateThread函数,但是没有包含在头文件中的所有#defines和crap。有没有什么方法可以导入(我认为这就是它所谓的)只是来自.dll或.lib的函数? 经过测试和失败:
#pragma comment(lib,"Kernel32.lib")
__declspec(dllimport)
unsigned long
__stdcall
WaitForSingleObject(
void* hHandle,
unsigned long dwMilliseconds
);
int main()
{
WaitForSingleObject(0,0);
}
答案 0 :(得分:3)
是的,你可以动态加载DLL,获取函数的地址然后调用它。我不确定你对Windows.h的问题是什么。
答案 1 :(得分:2)
至少有两个选择:
您不需要包含标题。 CreateThread
的定义不会改变。您可以将其声明(以及它所依赖的声明)从Windows标头复制到您自己的源文件中。
您可以围绕您使用的Windows API函数编写包装器,然后使用Windows API的“pimpl”使用,这样您就不必在所有位置包含Windows.h和其他标头。
在我看来,后一个选项可能更可取,因为它不易出错,更简单,并提供非标准函数的隔离,从而更容易移植代码。
答案 2 :(得分:0)
我认为DLL没有预处理程序指令,因为它们已经被编译,所以包括DLL不应该污染你的工作集。如果要包含源文件(* .h文件),那么您还需要编译这些函数,这很可能取决于那些指令和其他废话。