2

我正在从随书“Windows via C\C++”附带的 CD rom 中分析这段代码,我遇到了这个声明

m_hSnapshot = CreateToolhelp32Snapshot(dwFlags, dwProcessID);

DWORD 的位置dwFlags和位置dwProcessID

当我跳到这个函数的定义时,CreateToolhelp32Snapshot我发现了这个

HANDLE 
WINAPI
CreateToolhelp32Snapshot(
    DWORD dwFlags,
    DWORD th32ProcessID
    );

这种没有身体的功能怎么可能存在?

我尝试调试代码,但编译器并没有单步执行此函数,而是仅单步执行第一个语句,其中存储在 m_hSnapshot 中的值为 0x00000754。

4

6 回答 6

7

这种没有身体的功能怎么可能存在?

它没有。您所看到的只是一个函数原型。身体在别处定义。

于 2012-05-30T17:33:51.913 回答
4

你看到的不是函数定义而是声明。实际定义由 Windows 本身的 dll 提供,链接到您的可执行文件。

于 2012-05-30T17:34:16.143 回答
0

该函数有一个主体,但它只是不可见。

那只是声明。如果它是可见的,Windows 将是开源的(不要笑)。C++ 是一种编译语言。二进制文件是从代码生成的,代码本身不需要调用函数。

于 2012-05-30T17:34:03.503 回答
0

主体可能位于不同的位置,例如在您链接的静态或动态库中。

于 2012-05-30T17:34:18.783 回答
0

它只是一个接受参数的函数,它可能在用户初始化后被其他地方的方法使用。当您说进入命令提示符并请求显示进程时,它看起来实际上只是获取要显示的进程 ID 的快照。

于 2012-05-30T17:34:46.467 回答
0

是的,这只是在现有 Windows DLL (Kernel32.dll) 中定义的函数的原型

于 2012-05-30T17:35:43.517 回答