Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无体功能_C++_C_Windows - Fatal编程技术网

C++ 无体功能

C++ 无体功能,c++,c,windows,C++,C,Windows,我在分析《Windows via C\C++》一书附带的CD rom中的代码时,偶然发现了这条语句 m_hSnapshot = CreateToolhelp32Snapshot(dwFlags, dwProcessID); 其中,dwFlags和dwProcessID是DWORD的 当我跳转到这个函数的定义CreateToolhelp32Snapshot时,我发现了这个 HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags,

我在分析《Windows via C\C++》一书附带的CD rom中的代码时,偶然发现了这条语句

m_hSnapshot = CreateToolhelp32Snapshot(dwFlags, dwProcessID);
其中,
dwFlags
dwProcessID
是DWORD的

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

HANDLE 
WINAPI
CreateToolhelp32Snapshot(
    DWORD dwFlags,
    DWORD th32ProcessID
    );
没有身体,这样的功能怎么可能存在

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

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


没有。你所看到的只是一个幻觉。主体在别处定义。

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


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

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

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

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

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

。我真傻,竟然问这样的问题。我应该先查一下msdn。我甚至不知道代码的作者为什么把函数原型放在程序中,而它是一个API。真是一次旅行。这本书的第一版是我如何学会编写Windows程序的。里希特可能会解释为什么他要为这个功能提供自己的原型。在他写这篇文章的时候(就像142年前),这可能是一个未记录或未声明的函数。