フレキシブルにお客様のご要望にあわせ提供します.

 

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) から使うときもデータのマーシャリングをせずすむ手軽さ

 

内容物

  1. VC++ DLL およびヘッダファイル (要 VCpp2013 互換Runtime)
  2. .NET DLL ( 要.NET Framework 4互換 Runtime)
  3.  サンプルアプリケーション

 

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は利用しています)