我在这里有一些用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的答案,以了解为什么此代码还不够。