Mynetstat DLL | 通信状態取得 VC++ Lib, .NET DLL
Windows コマンド のひとつである netstat の実行により出力される情報は, プログラムからは Windows API (所謂Win32API) を使うことで取得できます。
今回はよりそれを簡易的に呼び出せるように, C++ Lib, .NET DLL を用意しました。サンプルプロジェクト(VB.NET, CSharp, C++) 付きです。
( ver.1.0, 2023-02-03 , zip , 更新履歴)
動作環境
【 動作 SDK 】Visual Studio 2013, 2019
【動作環境】 Windows 10 (64bit), Windows 7 (32bit)
【必要な環境※】 VC++2013 互換Runtime , .NET 4.5.1 互換Runtime (.NET)
上記のリンクはMicrosoft のダウンロードファイルの直リンです。ファイルサイズが大きいので携帯電話回線ではおすすめしません。お使いのWindows パソコンの環境によっては既に入っている場合もあります。VC++ からアクセスする場合は .NET Runtimeは不要です。
機能
以下の状態を持つ構造体を返します。
- 起動中のネットワークプロセスに関するローカル/リモートの IPアドレス, ポート, プロセスID (netstat 相当)
- プロセス名(もちろんプロセス名が日本語でもOK)
特長
- クラスインスタンスを生成し、関数をよぶだけの簡単さ
- ループ動作の場合も, 解放用の関数が用意( C++ なら _free , .NET なら Dispose)されているので, それを呼び出すだけでメモリの後始末ができる。
- .NET (C#, VB.NET) から使うときもデータのマーシャリングをせずすむ手軽さ
内容物
- VC++ DLL およびヘッダファイル (要 VCpp2013 互換Runtime)
- .NET DLL ( 要.NET Framework 4互換 Runtime)
- サンプルアプリケーション
1, 2, 3 を統合したソリューションになっております。DLLのインポートや使い方に関してはソリューションを開いてご参照ください。新規にプロジェクト作成される場合は、 VCpp の場合は 1. を設置しこれを参照し、 .NET の場合は、 1, 2 を設置し、 2を参照します。
提供機能は、わずかな関数にすぎませんので、したがって、サンプルアプリケーションもまた、シンプルにしてます。
VC++から呼び出す
TCPCpp* ins;
TCPROW* row = NULL;
ins = new TCPCpp();
row = (*ins).getstat();
for (int i = 0; i < row.size[0]; j++){
cout << row[i].LocalAddr << row[i].LocalPort <<
row[i].RemoteAddr << row[i].RemotePort << row[i].PID;
setlocale(LC_ALL, "japanese"); wcout << row[i].ProcessName;
cout << row[i].Statestr << endl;
}
(*ins).getstat_free(row); //getstat をループ実行させる場合は、これをループ毎に実行
delete ins;
VB.NET から呼び出す
Dim ins As TCPNET
Dim dat As TCPROW_NET()
Dim str As String
ins = New TCPNET
dat = ins.getstat()
For i = 0 To dat(0).size - 1
str = str & dat(i).LocalAddr & " " & dat(i).LocalPort &
" " & dat(i).RemoteAddr & " " & dat(i).RemotePort & " " &_
dat(i).PID & " " & dat(i).ProcessName & " " & dat(i).Statestr & ControlChars.NewLine
Next i
ins.Dispose()
C# から呼び出す
TCPNET ins;
TCPROW_NET[] dat;
ins = new TCPNET();
dat = ins.getstat();
for( int i=0; i <dat[0].size;i++){
str = str + dat[i].LocalAddr+" " + dat[i].LocalPort+" "
+dat[i].RemoteAddr+" " +dat[i].RemotePort+" " +dat[i].PID+
" " +dat[i].ProcessName + " " +
dat[i].Statestr+ "\r\n" ;
}
ins.Dispose();
配布上の注意
本体は 12KB と軽量です。.NET アプリの場合も配布する場合は TCPComWrap_x86.dll のみならず, 本体の TCPCom_x86.dll も同梱してください。
C++ からビルドする場合
C++ からビルドする場合は、ヘッダファイルも読み込んでください。
ダウンロードしたソリューションを用いれば、そのまま VB.NET, C#, VC++ でただちにアプリ作成ができるようになっています。
商用利用について
可能です。
ただし, パッケージソフトの一部として利用される場合は関数利用する前に, /* include Lib by kumasys.jp */ など著作権がわかるコメントを一文でもよいので入れてください。 パッケージではなくとも, 完成図書としてソースコードを引き渡すような案件において用いる場合も同様です。
繰り返し動作
繰り返しのから回しによる動作でメモリリークのなきことの確認をしました。ただしその場合は、ループさせるごとに提供している解放用の関数(C++なら ~ _free, .NET であれば Dispose) を実行していただければ、と思います。解放用関数を使わなくても動作はしますが、だんだんとメモリ消費量が上がってゆきます。
本DLL(バイナリ) の依存ライブラリ (ver1.0 の段階では)
本DLLは Windows API (所謂Win32API) を用いておりますので Windows 以外では動作しません。
また、ver1.0 の段階では C++ STL は「直接的には」利用していません( WinAPIは利用しています)