C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■93545 / 1階層)  GetAdaptersInfoの結果を取得できない
□投稿者/ Hongliang (939回)-(2019/12/20(Fri) 16:06:31)
試す環境もありませんしあんまりちゃんと見てませんが。

> [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
> public struct IP_ADDRESS_STRING
> {
>     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
>     public string Address;
> }
https://docs.microsoft.com/en-us/previous-versions/windows/embedded/ms891174%28v%3dmsdn.10%29
ドキュメントによるとchar Address[4 * 4]だそうです。
CharSet.UnicodeでのByValTStrはwchar_tになりますから定義が間違ってますね。
UnmanagedType.ByValArrayでbyte[]として扱うことになるかなぁ。
文字列化はEncoding.Default.GetString()したうえで、IndexOf('0')の前までをSubstringとかすることになりますかね。

> [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
> public struct IP_ADAPTER_INFO
> {
>     public IntPtr Next;
>     public Int32 ComboIndex;
>     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_ADAPTER_NAME_LENGTH + 4)]
>     public string AdapterName;
>     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_ADAPTER_DESCRIPTION_LENGTH + 4)]
https://docs.microsoft.com/en-us/previous-versions/windows/embedded/ms891170%28v%3dmsdn.10%29
IP_ADDRESS_STRINGと同様。

> //●実機にdllが存在することを確認
> [DllImport("iphlpapi.dll", CharSet = CharSet.Unicode)]
> //public static extern int GetAdaptersInfo(IntPtr pAdapterInfo, ref Int64 pBufOutLen);
> //●CE機ではInt64は扱えないと考え、Int32に変更
> public static extern int GetAdaptersInfo(IntPtr pAdapterInfo, ref Int32 pBufOutLen);
https://docs.microsoft.com/en-us/previous-versions/windows/embedded/aa450394%28v%3Dmsdn.10%29
Windows APIにおけるULONGは32bit符号なし整数値です。

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←GetAdaptersInfoの結果を取得できない /kiku →Re[2]: GetAdaptersInfoの結果を取得できない /kiku
 
上記関連ツリー

GetAdaptersInfoの結果を取得できない / kiku (19/12/20(Fri) 15:10) #93544
GetAdaptersInfoの結果を取得できない / Hongliang (19/12/20(Fri) 16:06) #93545 ←Now
  └ Re[2]: GetAdaptersInfoの結果を取得できない / kiku (19/12/20(Fri) 18:41) #93552
    └ Re[3]: GetAdaptersInfoの結果を取得できない / kiku (19/12/20(Fri) 18:41) #93553 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信