RCC*_*RCC 1 c++ windows windows-xp visual-c++
我在C++中有一些遗留代码可以做一些我不理解的事情.我在运行Windows XP的计算机上运行Visual C++ 2008 Express Edition.
该代码使用了一些Windows函数:GetAdaptersInfo和GetAdaptersAddressess.我意识到这两个的最后一个参数是指向缓冲区大小的指针,因为它是in_out,所以可以在函数内进行更改.
我的问题是:这些函数是否应该改变缓冲区长度?
在我的代码中,每次调用这些函数时,缓冲区长度变量都被初始化为零,并且在调用函数之后,它仍然为0.
当然,@ RichieHindle的答案中的示例代码包含竞争条件....如果Windows想要返回的结构的大小在第一次调用GetAdaptersInfo()之后但在第二次调用GetAdaptersInfo()之前增长,则第二次调用到GetAdaptersInfo()也将失败,ERROR_BUFFER_OVERFLOW,你的功能将无法正常工作.
是的,这确实发生在现实生活中 - 我已经把它发生在我身上.如果您希望代码可靠,则需要在循环中调用GetAdaptersInfo(),根据需要多次增加缓冲区的大小,直到调用成功为止.
必须有一个不那么容易出错的方法来构建一个API ......不幸的是,微软还没有找到它.:^ P
| 归档时间: |
|
| 查看次数: |
5177 次 |
| 最近记录: |