2009-01-01から1年間の記事一覧

ファイルの最終行を削除する。ファイルの末尾の改行コードを削除する。(String.LastIndexOf)

ファイルの最終行を削除する場合は、String.LastIndexOfで末尾から改行コード(vbCrLf)を検索して見つかった位置からの文字列を削除します。すべての行に改行コードが付いている場合は、ファイルの末尾から2つ目の位置にある改行コード以降の文字列を最終行…

ファイルの末尾に文字列を追記する。(System.IO.File.AppendAllText)

ファイルの末尾に文字列を追記するにはSystem.IO.File.AppendAllTextメソッドを使用します。(いくつか方法がありますが最も簡単な方法) Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handl…

VssWinMergeComparer。VisualStudio2008アドイン。(VisualSourceSafe2005の最新バージョンと編集中の作業ディレクトリをWinMergeで比較する。)

VisualSourceSafeの最新バージョンと作業フォルダの編集中のファイルをWinMergeで比較するVisualStudio2008のアドインを作成しましたので公開します。VssWinMergeComparerバイナリモジュールVssWinMergeComparer-bin.zip ソースコードVssWinMergeComparer-sr…

WinMergeをコマンドラインから利用する。

WinMergeは各種のツールと連携ができるようにコマンドラインインタフェースを備えています。今回は、コマンドラインインタフェースを使用してVisualSourceSafeから最新を取得したフォルダとチェックイン前のローカルの作業フォルダを渡して比較する例を記載…

Visual Studio 2008 と Visual Source Safe(VSS)のバインド情報を取得する。

サンプルコードVisual Studio 2008 と Visual Source Safe はチェックイン・チェックアウトの操作をIDE上から実施できるように、プロジェクトとソリューションをVSSのプロジェクト(フォルダ)と対応付けして連携して処理ができるようにしています。このバイン…

ファイル名の構成要素を分解する。(フルパス、フォルダ、ファイルネーム、ベースネーム、エクステンション)

ファイル名の構成要素を分解した場合の呼び名と取得方法を整理してみます。フルパス(Full Path) C:\Users\Administrator\Documents\test.txt ドライブ名(Drive Name) C:\ Dim f As String = "C:\Users\Administrator\Documents\test.txt" Debug.Print(System…

指定したパス情報がファイルかフォルダ(ディレクトリー)か判断する。

指定したパス情報がファイル名かフォルダ名か判断するにはSystem.IO.File.Exists関数とSystem.IO.Directory.Exists関数を使います。File.Exists関数は、指定したパスがフォルダとして存在している場合でもファイルではない場合はFalseを返します。また、Dire…

System.IO.Directory.CreateDirectoryは親ディレクトリが存在しない場合、親を含めて作成する。(SysUtils.ForceDirectories)

Delphiでは、CreateDir関数とは別にForceDirectories関数があり親ディレクトリが無い場合に親ディレクトリまで作成する関数があります。.Netでは、どうやれば良いかと確認すると、System.IO.CreateDirectory関数がForceDirectories関数と同じ動作をすること…

相対パスを絶対パスに変換する。(System.Uri)

相対パスは、あるフォルダを基準とした場合のパス情報です。基準となるディレクトリはカレントディレクトリが使用される場合が多いですが、任意のディレクトリを指定した相対パスを使う場合もあります。カレントディレクトリを基準とする場合は、相対パスの…

System.Windows.Forms.NativeWindowによる、メッセージ専用ウインドウの作成

サンプルコードNativeWindowMessageOnly.zip NativeWindowクラスは、ウインドウ処理の基本となる処理をまとめたクラスで、ウインドウメッセージ(SendMessage,PostMessage)とウインドウプロシージャ(WndProc)の処理をカプセル化するための処理が集まって…

System.Windows.Forms.NativeWindowによる、ウインドウメッセージの横取り(サブクラス化)

サンプルコードNativeWindowSubClass.zip NativeWindowクラスは、ウインドウ処理の基本となる処理をまとめたクラスで、ウインドウメッセージ(SendMessage,PostMessage)とウインドウプロシージャ(WndProc)の処理をカプセル化するための処理が集まっていま…

プロセスレベルのグローバル変数(Singleton, Shared, Module)と、スレッドレベルのグローバル変数(ThreadStatic=スレッドローカルストレージ)

サンプルコードGlobalInformation.zip .Netでのグローバル変数の持ち方について考えてみます。グローバル変数は、変数の生存期間(ライフタイム)と適用範囲(スコープ)を最小にするという原則に従って極力使わないようにするべきものですが、逆に言えば生…

属性(System.Attribute)を作成して、属性を付けたクラスとメソッドを列挙する。

サンプルコード:LoadAssembley-2.zip Visual Studio 2008 でXMLコメントを打つと以下のように出力されます。 ''' ''' ''' ''' Public Shared Sub Main()Summary(要約)やRemarks(注釈)は記載できますが、プログラムを書いた人(Author)の情報を入力する…

DLL(.Net クラスライブラリ=アセンブリ) を実行時に動的ロードする。(System.Reflection.Assembly.LoadFrom)

サンプルコードLoadAssembley.zip .Net で作成したDLLを使用するためには、使用したいDLL(アセンブリ)を参照設定して使用します。参照設定したDLLはアプリ起動時にDLLとのリンクを解決するために、メモリ上にロードされ、クラスやメソッドのエントリーポイ…

.Net Remoting をスケーラブルにするための9つのルール

原文は、thinktecureのサイトの記事です。 http://www.thinktecture.com/resourcearchive/net-remoting-faq/remotingusecasesスケールアウト可能な構成で.Net Remotingを使用するための9つのルールというトピックです。補足説明付きで訳してみます。 Use on…

XMLシリアライズできないケースに対応する。Dictionaryクラスをシリアライズする。IXmlSerializable。

アトリビュートを付与しているインスタンスであればシリアライズできますが、インスタンスによっては失敗するケースがあります。サンプルコードXMLSerializerTest.zip ■Dictinaryクラス System.InvalidOperationException はハンドルされませんでした。 Mess…

WCFと.Net Remotingを混在させる

WCFは.Net Remotingの後継技術ですが、同一プロセスで.Net RemotingサービスとWCFサービスをホストすることが出来ます。(但し、ポート番号を変更する必要はあります。)過去に.Net Remotingで作成したシステムを部分的拡張する場合にWCFを利用する。という…

WCF入門-10。System.Diagnostics.TraceListenerを継承してカスタムトレースリスナを作成する。

サンプルコードWCFService-10.zip WCFは通信のリクエスト毎にスレッドを立ち上げてクライアントの要求に答えるのでトレースリスナはスレッドセーフである必要があります。System.Diagnostics.XmlWriterTraceListenerはスレッドセーフではないので、カスタム…

WCF入門-09。トレースログを出力する。(System.ServiceModel.MessageLogging)

サンプルコードWCFService-09.zip WCFでは、アプリケーション構成ファイル(app.config)に、トレースログ出力の設定をするだけでWCFの処理の追跡・クライアントサーバー間でやりとりされるSOAPメッセージをログに出力することができます。通信データをログに…

WCF入門-08。コントラクトを理解する。(サービスコントラクト、オペレーションコントラクト、データコントラクト、メッセージコントラクト、エラーコントラクト)

WCFでは、クライアントとサーバのインタフェースにあたる部分を「コントラクト」と呼んでいます。英語で「Contract」、日本語訳で「契約」です。クライアントとサーバ間での契約ということで、どのようなインタフェースで渡すかという取り決め。ということで…

WCF入門-06。サービス参照の追加でWSDLからクライアントのアプリケーション構成ファイルとカスタムクラスを作成する。

WSDLをサービス参照の設定で取り込むサンプルコードWCFService-06.zip WCFのサーバーをアプリケーション構成ファイルで構成する方法と、公開するサービスをWSDLで公開する方法を見てきました。今回は公開されたWSDLから、クライアントがサーバに接続するため…

WCF入門-05。WSDLでサービスのインタフェースを公開する。

コードを使用してWSDLを公開する。WCFService-05.zip WCFで作成したサービスはWEBサービスのインタフェースの標準規格であるWSDL(Web Services Description Language)で情報を公開することが出来ます。作成したアプリを起動して、ベースアドレスのURLに対し…

WCF入門-04。アプリケーション構成ファイル(app.config)を使用してWCFを構成する。

アプリケーション構成ファイルを使用してWCFを構成します。WCFService-04.zip アプリケーション構成ファイルを使用すると、WCFのサービスモデルを構成する要素(アドレス・コントラクト・バインディング・ビヘイビア)を外部ファイルに記述することが出来ま…

WCF入門-03。基本構成のWCFサンプルコード。

WCFの基本的な構成のサンプルコードを作ります。WCFService.zip 以下の3つのプロジェクトを作成し、WCFシステムを構成していきます。 WCFサーバー(コンソールアプリケーション:.exe) WCFクライアント(ウインドウアプリケーション:.exe) WCFインタフェース(…

WCF入門-02。WCFのエンコードとフォーマットを理解する。

WCFでクライアントからサーバへ、サーバからクライアントで転送するデータのエンコード(符号化)は、以下の3種類から選択することができます。 テキスト(XML1.0) バイナリ(Base64BinaryEncoding) MTOM(SOAP Message Transmission Optimization Mechanism) …

WCF入門-07。クライアントのアプリケーション構成ファイルを作成する。

サンプルコード。WCFService-07.zip [サービス参照の追加]を使うとWSDLで公開されたウェブサービスにアクセスするためのアプリケーション構成ファイルとカスタムクラスを作成できますが、WCFサーバーを自作している場合は、WCFインタフェースのクラスライブ…

Visual Studio 2008 のアドインを作成する。右クリックメニュー(コンテキストメニュー)にユーザ定義の項目を追加する。

Visual Studio 2008 の各種右クリックメニューを拡張するには、CommandBarsコレクションの追加したいコンテキストメニューにcommandBarButtonを追加して対応します。今回はソリューションエクスプローラの右クリックメニューを拡張します。ソリューション、…

Visual Studio 2008 のアドインを作成する。指定したファイルの指定した行番号にジャンプする。

Visual Studio 2008 のアドインからIDEを操作する場合は、EnvDTE80.DTE2オブジェクトを使います。EnvDTE80.DTE2は、IDEのオブジェクトモデルそのもので基本的な操作が一通りできるようになっています。今回は、指定したファイルを開いて、指定した行番号にカ…

WCF入門-01。WCFのサービスモデルを理解する。

WCF(Windows Communication Foundation)について学習していきます。WCFはMicroSoftの分散オブジェクト技術の実装のひとつですが、ひらたく言うとクライアントとサーバの間でオブジェクトをやり取りするためのフレームワークです。サーバで作成したクラスの…

Visual Studio 2008 のアドインを作成する。コマンドバーの構成。

CommandBarsコレクションのダンプcommandbars.txt Visual Studio 2008 のアドインを作成する場合、IDE上のコマンドバーを拡張して追加機能を付けていきます。コマンドバーにユーザ定義のボタンを追加するコードは以下のようになります。 '''IDTExtensibility…