1

為に:

DWORD GetAdaptersInfo(
  __out    PIP_ADAPTER_INFO pAdapterInfo,
  __inout  PULONG pOutBufLen
);

の説明pOutBufLenは次のとおりです。

pOutBufLen

[入力、出力] pAdapterInfo パラメーターによって示されるバッファーのサイズ (バイト単位) へのポインター。このサイズがアダプター情報を保持するには不十分な場合、この関数は必要なサイズでバッファーを埋め、エラー コード ERROR_BUFFER_OVERFLOW を返します。

ここで私の質問は、バッファ サイズ、つまり pOutBufLen をどうやって知ることができるかということです。また、16 個を超える NIC がある場合の正しい方法は何ですか?

ソースmsdn

4

1 に答える 1

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ループで行うか、その順序で実行する必要があります。呼び出し、割り当て、再度呼び出し、成功するまで再割り当てと再呼び出しを続けます。

これにより、ユーザーがたまたま最初の呼び出しと 2 番目の呼び出しの間にネットワーク アダプターを接続しとしても、(最終的には) 成功します。電話。

于 2012-06-04T06:14:25.977 に答える