2009-10-01から1ヶ月間の記事一覧

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…

Visual Studio 2008 のアドインを作成する。まとめ。

今まで何回かに分けてVisual Studio 2008 のアドインを作成するための基礎知識・要素技術を説明してきました。 記事だけだとイメージがわかない部分があるので、ビットマップを用意しました。Visual Studio 2008 のアドインを作成する。アドインの設定。http…

Visual Studio 2008 のアドインを作成する。ドッキングウインドウの作成。

VisualStudio2008のアドインにドッキング可能ウインドウを作成する場合は、EnvDTE80.Windows2.CreateToolWindow2メソッドを使用します。ドッキング可能ウインドウだけだと中身が空っぽの状態になるので、表示するユーザーコントロールを同時に作成します。ユ…

静的リンクと動的リンクまとめ

あるプログラムから別のライブラリを使用する場合のリンク方法ですが、一般的に以下の3つの方法があります。(.NETでは静的リンクは出来ません)■静的リンク ライブラリはコンパイル済みの別のファイルとして存在しますが、コンパイル時にプログラムの中に…

GUIDを作成する。

重複しない一意な識別子(単純なものであれば連番、ランダムなID、MACアドレスなど)を取得したい場合にGUIDを利用する事ができます。GUIDは128ビットのIDで何度GUID取得処理を行っても同じ値が出現しないように設計されていて、時刻やマシン固有の情報(MAC…

32bit OS で、4GByte以上のメモリを搭載する。

32bit OSでは、メモリの搭載上限が4Gbyteと決まっています。ですが、PAE(物理アドレス拡張)を使うと、例えばWindows 2008 Server Enterprise Edition では 64GByteまでのメモリを扱えるようになります。但し、PAEを利用できるのはEnterprise Edition など…

ユーザー インターフェイス特権の分離 (UIPI)と、ウインドウメッセージ(SendMessage,PostMessage,ChangeWindowMessageFilter)

Windows Vista ならびに Windows 2008 からは、セキュリティが強化されたためウインドウメッセージを使用した処理がOSによってフィルタリングされるケースがあります。 この問題は、少しこみいっていてSendMessageやPostMessageはフィルタリングされた場合で…

DLLの参照カウントについて

LoadLibraryとFreeLibraryを使用したDLLの動的ロードは以下の記事で説明しました。http://d.hatena.ne.jp/tekk/20091018/1255880682LoadLibraryとFreeLibraryは、DLLの実行時ロードと解放をそれぞれ担当するAPIですが、呼び出した際にいきなりDLLを読みこん…

DLL(Win32 API など) を実行時に動的ロードする。(LoadLibrary,GetProcAddress,FreeLibrary)

Win32APIを使用する場合はDLLImport属性を付けて使用したいAPIを事前に定義して使います。DllImport属性は使用したいDLLとのリンクがコンパイル時に設定されるためアプリ起動時にリンクを解決しようとします。(リンクを解決するというのは、DLLをメモリ上に…

Win32 API のエラー情報を取得する

Win32 APIを実行したあとでエラー情報を取得するには次の2段階の処理を経て取得します。(Win32APIは失敗しても例外は発生しません)1.Marshal.GetHRForLastWin32Errorでエラー情報のHRESULT値を取得します。 2.Marshal.GetExceptionForHRでHRESULT値から例…

sitemap.xmlの作り方

検索エンジン用のsitemap.xmlの実装例です。指定したフォルダ以下にアップロードするファイル一式が揃っている状態で使用します。携帯電話向けのsitemap.xmlも出力することができます。 Imports System Imports System.Xml Imports System.TextPublic Class …

ウインドウメッセージによるプロセス間通信(WM_COPYDATA)

WM_COPYDATAメッセージを利用したプロセス間通信処理を作成する。WM_COPYDATAはプロセス間通信を目的としたウインドウメッセージで任意のサイズのデータをグローバルヒープメモリを通して別プロセスに伝えることができる。使用に当たっては、以下の課題を整…

ウインドウメッセージのリフティング処理(PostMessageの隠れた使い方)

ウインドウアプリケーションでは、ウインドウそれぞれがメッセージキューを持っていて順番にメッセージを処理します。処理が終わるまでは、次のメッセージは処理されません。この特性を利用して、処理のタイミングを調整するプログラミングテクニックをウイ…

SendMessageとPostMessageの違い

SendMessage メッセージを転送先のウインドウのウインドウプロシージャに直接送信します。処理は同期で、転送先のウインドウプロシージャがメッセージを処理し終えるまでは呼び出し元の処理はブロックされます。 PostMessage メッセージを転送先のウインドウ…

リモートデスクトップを使って、物理コンソールに接続する

リモートデスクトップを使用するとユーザ毎に新しくログオンセッションが開始されますが、以下のコマンドを実行すると物理的なキーボードやマウスが接続されているコンソールセッションとして接続することができます。コマンドラインから以下を実行します。 …

BinaryFormatterを使用してインスタンスをバイナリでシリアライズする。

.Netのシリアライズで最も早く最も効率的なシリアライズはBinaryFormatterを使用したバイナリでのシリアライズです。.Net Remoting などの内部通信形式としても使用されているシリアライズです。XMLシリアライズできないケースに対応するで紹介したシリアラ…

オブジェクトのコピー。ICloneableインタフェース、MemberWiseClone、シリアライズを利用したインスタンスのコピー。

オブジェクトをコピーするためにはMemberwiseCloneメソッドを使用します。MemberwiseCloneメソッドは、シャローコピー(浅いコピー)と呼ばれるコピーで値型のメンバーをコピーして新しいインスタンスを作成する方法です。参照型のメンバーに関しては、参照…