c – GetAdaptersInfo和GetAdaptersAddressess BufferLength Param
作者:互联网
我在C中有一些遗留代码可以做一些我不理解的事情.我在运行Windows XP的计算机上运行Visual C 2008 Express Edition.
该代码使用了一些Windows函数:GetAdaptersInfo和GetAdaptersAddressess.我意识到这两个的最后一个参数是指向缓冲区大小的指针,因为它是in_out,所以可以在函数内进行更改.
我的问题是:这些函数是否应该改变缓冲区长度?
在我的代码中,每次调用这些函数时,缓冲区长度变量都被初始化为零,并且在调用函数之后,它仍然为0.
解决方法:
您的代码需要看起来像这样:
// First get the desired size.
unsigned long outBufLen = 0;
DWORD dwResult = GetAdaptersInfo(NULL, &outBufLen);
if (dwResult == ERROR_BUFFER_OVERFLOW) // This is what we're expecting
{
// Now allocate a structure of the requried size.
PIP_ADAPTER_INFO pIpAdapterInfo = (PIP_ADAPTER_INFO) malloc(outBufLen);
dwResult = GetAdaptersInfo(pIpAdapterInfo, &outBufLen);
if (dwResult == ERROR_SUCCESS)
{
// Yay!
编辑:另请参阅Jeremy Friesner的答案,说明为什么这段代码还不够.
标签:c,windows,visual-c,windows-xp 来源: https://codeday.me/bug/20191007/1867525.html