C++ 无体功能
我在分析《Windows via C\C++》一书附带的CD rom中的代码时,偶然发现了这条语句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,
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年前),这可能是一个未记录或未声明的函数。