夕暮ログ

C#やJavascript、最近はAndroidなんかも好きなtinqのブログ。「夕暮れログ」

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

デバッガビジュアライザで使う関数

デバッガビジュアライザを作るうえで必要となる関数などの紹介です。
クラス名などをクリックすると、MSDNを表示します。
ただし、2010のバージョンはいまだ機械翻訳の部分があるようなので、2008用のページを書いておきます。

DialogDebuggerVisualizer


自作するデバッガビジュアライザはこれを継承したクラスです。
呼び出されるShowメソッドをオーバーライドするだけで使えます。

Show(IDialogVisualizerService,IVisualizerObjectProvider)


 継承された自作クラスでオーバーライドします。以下は引数の説明です。
 
IDialogVisualizerService : windowService

  フォーム、コントロール、ダイアログを表示するためのメソッドを提供します。
  フォーム、コントロール、ダイアログを表示させる場合には、このインターフェースを通じてやります。
  詳しくは下記。
 
IVisualizerObjectProvider : objectProvider

  デバッグする対象のデータを取得/設定します。
  たとえば、string型のデバッガビジュアライザではstring型のデータを取得/設定できます。
  詳しくは下記。

IDialogVisualizerService


 windowServiceという名前でデバッガビジュアライザに渡されます。ビジュアライザを表示するだけのインターフェースです。
 

void ShowDialog(CommonDialog)


  CommonDialogから継承されたコモンダイアログを表示します。たとえば、OpenFileDialog、FontDialog、ColorDialogなどです。
  私が公開したアイコンダイアログあたりも使えるはずです。ただ、プロパティダイアログとかはShowDialogなのにモードレスというクソなのでできないと思います。
  そのうち修正するかも。
 

void ShowDialog(Control)


  コントロールを表示します。といっても、コントロールだけポンとおかれるのではなく、モーダルフォームが表示されてその中にコントロールが表示されます。
  たとえば、ウェブブラウザをいっぱいに広げたい、などという場合に使えると思われます。
  そのまま渡すとサイズ変更などがうまくできないので、DockにDockStyle.Fillをセットしましょう。サイズを変更すると自動でサイズを変更してくれます。
 

void ShowDialog(Form)


  フォームをモーダルで表示します。モーダルなので、閉じるまで作業は進みません。

ちなみに、モードレスで表示しようとして、Form.Show();などとやっても無駄です。
すぐにフォームが閉じられてしまいます。

IVisualizerObjectProvider


 VisualizerObjectSourceクラスまたはそれを継承したクラスとの通信を行うためのインターフェースです。
 これを通じてデバッガビジュアライザはデバッグ対象のオブジェクトを受け取ったり、返したりします。
 

Stream GetData()


  逆シリアル化すればオブジェクトを取得できます。
 

Object GetObject()


  オブジェクトを取得します。これをキャストして利用できます。
  内部でGetDataを呼び出しています。特に理由がない場合はこちらを利用すればいいでしょう。
  これを変更しても、元のオブジェクトは変化しません。書き換える場合は、ReplaceObjectやTransferObjectを利用します。
 

void ReplaceData(Stream newObjectData)


  これでデバッグ対象のオブジェクトを置き換えられます。シリアル化してやる必要があるようです。
 

void ReplaceObject(Object newObject)


  デバッグ対象のオブジェクトを置き換えます。内部でReplaceDataを呼び出しています。こちらを使えばいいでしょう。
 

void TransferData(Stream outgoingObject)


  デバッグ対象にストリームを返します。詳細不明で、私の環境では呼び出すと例外が発生してしまいます。
  もしわかる方がいましたらコメントまでお願いします。
    どうやら、入力と出力を両方受け取れる、ということのようです。たとえば、intで指定された分を元に足し算して返すとか、stringで指定された文字列をつなげて返すとかに使うのでしょうか。たぶん、標準では中身が用意されていないようです。継承して使えるのではないでしょうか。
 

void TransferObject(object outgoingObject)


  こちらも内部でTransferDataを呼んでいます。こちらも私の環境ではうまく動作しないようです?


結局、ShowDialogと、GetObject、ReplaceObjectあたりを理解していれば十分だと思います。

流れとしては、
(1)GetObjectでオブジェクトを取得する
(2)ShowDialogでフォームやコモンダイアログを表示する。
(3)編集を加える場合、ReplaceObjectで変更をする
となります。
関連記事

コメント

ここをクリックしてコメントを投稿

非公開コメント

トラックバック

http://tinqwill.blog59.fc2.com/tb.php/30-65818448

« next  ホーム  prev »

プロフィール

tinq tinq(もしくはTinqWill)

Sky  For   Every 改装予定

プログラミングお勉強中の高校生。月一くらいは更新したい

最新記事

カテゴリ

月別アーカイブ

検索フォーム

最新コメント

リンク

最新トラックバック

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。