有关:
DWORD GetAdaptersInfo(
__out PIP_ADAPTER_INFO pAdapterInfo,
__inout PULONG pOutBufLen
);
pOutBufLen
的说明如下:
pOutBufLen
[in,out]指向pAdapterInfo参数指示的缓冲区大小(以字节为单位)的指针。如果此大小不足以保存适配器信息,则此函数将填充具有所需大小的缓冲区,并返回错误代码ERROR_BUFFER_OVERFLOW。
现在我的问题是我们怎么知道缓冲区大小应该是什么,即pOutBufLen? 如果我们有超过16个NIC,那么正确的方法是什么?
来源msdn
答案 0 :(得分:2)
使用它的常用方法是这样的:
IP_ADAPTER_INFO *buffer= NULL;
ULONG length = 0;
// call with length of 0. It'll fail, but tell us needed size.
GetAdaptersInfo(buffer, &length);
// allocate space needed.
buffer = malloc(length);
// Call again, with necessary size.
if (buffer != NULL)
GetAdaptersInfo(bufer, &length);
至少在理论上,您应该在while
循环中执行此操作,或者在该订单上执行此操作 - 调用,分配,再次调用,并继续重新分配和重新调用,直到成功为止。
这将使它(最终)成功,即使用户恰好在第一次和第二次调用之间插入网络适配器 ,所以即使你分配了它认为需要的空间在你第二次打电话之前,它就变得不够了。