其他分享
首页 > 其他分享> > c – GetAdaptersInfo和GetAdaptersAddressess BufferLength Param

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