我尝试编写一个ping线程,搜索连接的设备到本地网络。我需要避免使用indy,因为它适用于Windows中的管理帐户。
我翻译了msdn的c ++示例。我应该使用IcmpCloseHandle吗?如果是这样,我为什么要关闭只是一个基本变量的手柄。如果不是,那么方法是什么?
mousemove
答案 0 :(得分:2)
IcmpCreateFile
的文档相当薄弱。它应该指出IcmpCreateFile
成功返回的句柄应该在不再需要时调用IcmpCloseHandle
来关闭。所以,是的,您需要拨打IcmpCloseHandle
。
您错误地认为IcmpCreateFile
会返回Cardinal
。 Cardinal
是32位类型,但IcmpCreateFile
返回HANDLE
,这是指针大小的类型。在64位编译时,您的代码将失败。您在IcmpSendEcho
标题翻译中使用的某些其他类型看起来很可疑。如果我是你,我会抨击如何翻译Win32头文件,并找到并使用值得信赖的标题翻译。
我还要强调,您的代码不会尝试处理错误。你在这里玩火。我们在这里看到这么多次了,我相信我已经在很多场合亲自告诉过你这件事。因此,请阅读您调用的每个API函数的文档,并正确处理错误。
除非您是Win32 API标头翻译和使用方面的专家,否则您可能会生成具有缺陷的代码。例如,使用来自JEDI的第三方标题翻译可能是谨慎的。