0

我想使用 windows.h 中的 CreateThread 函数,但没有包含在头文件中的所有#defines 和废话。有什么方法可以从 .dll 或 .lib 中导入(我认为这就是它的名称)吗?测试失败:

#pragma comment(lib,"Kernel32.lib")
__declspec(dllimport)
unsigned long
__stdcall
WaitForSingleObject(
    void* hHandle,
    unsigned long dwMilliseconds
    );


int main()
{
    WaitForSingleObject(0,0);
}
4

3 回答 3

3

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

LoadLibrary GetProcAddress

于 2012-06-05T17:39:20.483 回答
2

至少有两种选择:

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

  2. 您可以围绕您使用的 Windows API 函数编写包装器,然后“pimpl”使用 Windows API,这样您就不必到处包含 Windows.h 和其他头文件。

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

于 2012-06-05T17:44:31.993 回答
0

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

于 2012-06-05T17:43:20.310 回答