提取特定的Win32函数

时间:2012-06-05 17:25:00

标签: c++ winapi dll

我想使用来自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);
}

3 个答案:

答案 0 :(得分:3)

是的,你可以动态加载DLL,获取函数的地址然后调用它。我不确定你对Windows.h的问题是什么。

LoadLibrary GetProcAddress

答案 1 :(得分:2)

至少有两个选择:

  1. 您不需要包含标题。 CreateThread的定义不会改变。您可以将其声明(以及它所依赖的声明)从Windows标头复制到您自己的源文件中。

  2. 您可以围绕您使用的Windows API函数编写包装器,然后使用Windows API的“pimpl”使用,这样您就不必在所有位置包含Windows.h和其他标头。

  3. 在我看来,后一个选项可能更可取,因为它不易出错,更简单,并提供非标准函数的隔离,从而更容易移植代码。

答案 2 :(得分:0)

我认为DLL没有预处理程序指令,因为它们已经被编译,所以包括DLL不应该污染你的工作集。如果要包含源文件(* .h文件),那么您还需要编译这些函数,这很可能取决于那些指令和其他废话。