没有身体的功能

Function without a body

本文关键字:功能      更新时间:2023-10-16

我正在分析"Windows via C\C++"一书附带的配套CD rom中的这段代码,我遇到了这个语句

m_hSnapshot = CreateToolhelp32Snapshot(dwFlags, dwProcessID);

其中dwFlagsdwProcessID是DWORD的

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

HANDLE 
WINAPI
CreateToolhelp32Snapshot(
    DWORD dwFlags,
    DWORD th32ProcessID
    );

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

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

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

其实不然。您看到的只是一个功能原型。身体在别处定义。

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

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

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

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

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

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