<?xml version="1.0" encoding="UTF-8" ?>
<feed xml:lang="ja" xmlns="http://www.w3.org/2005/Atom">
	<generator uri="http://nucleuscms.org/" version="Nucleus CMS v3.31SP1-kes">Nucleus CMS v3.31SP1-kes</generator>

	<id>http://fireball.loafer.jp/kes/</id>
	<link rel="self" type="application/atom+xml" href="http://fireball.loafer.jp/kes/atom.xml" />
	<link rel="related" type="text/html" href="http://fireball.loafer.jp/" />
	<link rel="alternate" type="text/html" href="http://fireball.loafer.jp/kes/" />

	<rights>© 2008 Project Loafer/Project Fireball and all blog writers.</rights>

	<title>Entering Passive Mode</title>
	<subtitle>やる気のない受け身なブログ。実験場。</subtitle>

	<updated>2007-11-07T21:46:00+09:00</updated>
	<entry>
		<author>
			<name>kes</name>
			<uri>http://loafer.jp</uri>
		</author>
		<category term="C++/CLI" scheme="http://fireball.loafer.jp/kes/cpp-cli/" />
		<content type="html">
<![CDATA[
<p>
「設定」ボタンも Application::ConfigureProc で処理されるので、<br />
IDC_CONFIGURE 向けの WM_COMMAND メッセージを処理すればよい。
</p>
<p>
プラグイン用の設定画面の呼び出しも、一覧表示と同じように作る。<br />
ConfigureProc メソッドをマネージにしないように、<br />
ConfigurePlugin という名前のヘルパメソッドに分離する。
</p>
<a href="http://fireball.loafer.jp/kes/cpp-cli/article_593.html">続きを読む</a>
]]>
		</content>
		<id>http://fireball.loafer.jp/kes/cpp-cli/article_593.html</id>
		<link rel="alternate" type="text/html" href="http://fireball.loafer.jp/kes/cpp-cli/article_593.html" />
		<published>2007-11-07T21:46:00+09:00</published>
		<title type="html"><![CDATA[プラグイン固有の設定画面の表示]]></title>
		<updated>2007-11-07T21:46:00+09:00</updated>
	</entry>
	<entry>
		<author>
			<name>kes</name>
			<uri>http://loafer.jp</uri>
		</author>
		<category term="C++/CLI" scheme="http://fireball.loafer.jp/kes/cpp-cli/" />
		<content type="html">
<![CDATA[
<p>
ISaver 実装型一覧に表示できるようになったので、<br />
次は「設定」ボタンで設定画面を呼び出せるようにしたい。
</p>
<p>
設定画面を呼び出すには、設定ボタンを押した際に、<br />
コンボボックスに選択されている名前に対応した<br />
ISaver 実装型のインスタンスを作れば良いのだ。
</p>
<p>
コンボボックスに CB_GETCURSEL メッセージを送れば、<br />
現在選択されている項目のインデックス（数値）が得られるので、<br />
その数値を元に Manager クラスのインデクサから Type を得れば良い。
</p>

<a href="http://fireball.loafer.jp/kes/cpp-cli/article_592.html">続きを読む</a>
]]>
		</content>
		<id>http://fireball.loafer.jp/kes/cpp-cli/article_592.html</id>
		<link rel="alternate" type="text/html" href="http://fireball.loafer.jp/kes/cpp-cli/article_592.html" />
		<published>2007-11-01T20:59:00+09:00</published>
		<title type="html"><![CDATA[msclr::gcroot<T> 構造体テンプレート]]></title>
		<updated>2007-11-01T20:59:00+09:00</updated>
	</entry>
	<entry>
		<author>
			<name>kes</name>
			<uri>http://loafer.jp</uri>
		</author>
		<category term="C++/CLI" scheme="http://fireball.loafer.jp/kes/cpp-cli/" />
		<content type="html">
<![CDATA[
<p>
Manager ができたので、これを使ってダイアログボックスに一覧表示するのだが、<br />
プラグインには ISaver2 を実装していないものも存在する。
</p>
<p>
ISaver2 を実装している場合は Name プロパティを使えば良いが、<br />
ISaver しか実装していない場合は、クラスの簡易名を使うことにしよう。<br />
簡易名とは、名前空間を含まないクラスの名前部分のみを示す。
</p>
<p>
例えば、HelloSaver は ISaver2 を実装していないため、<br />
クラス名である「HelloSaver」を名前として表示することになる。
</p>
<p>
設定ダイアログは Application::ConfigureProc で処理されているので、<br />
WM_INITDIALOG メッセージを拾ってコンボボックスに設定する。
</p>

<a href="http://fireball.loafer.jp/kes/cpp-cli/article_591.html">続きを読む</a>
]]>
		</content>
		<id>http://fireball.loafer.jp/kes/cpp-cli/article_591.html</id>
		<link rel="alternate" type="text/html" href="http://fireball.loafer.jp/kes/cpp-cli/article_591.html" />
		<published>2007-10-31T20:36:00+09:00</published>
		<title type="html"><![CDATA[タイトルの一覧表示]]></title>
		<updated>2007-10-31T20:36:00+09:00</updated>
	</entry>
	<entry>
		<author>
			<name>kes</name>
			<uri>http://loafer.jp</uri>
		</author>
		<category term="C++/CLI" scheme="http://fireball.loafer.jp/kes/cpp-cli/" />
		<content type="html">
<![CDATA[
<p>
プラグインのロードはManager クラスのコンストラクタで行う。
</p>
<p>
手順としては、plugin フォルダの内部からアセンブリを探し、順にロードする。<br />
そして、ロードしたアセンブリの中から、ISaver 実装型を検索するという流れだ。
</p>
<a href="http://fireball.loafer.jp/kes/cpp-cli/article_590.html">続きを読む</a>
]]>
		</content>
		<id>http://fireball.loafer.jp/kes/cpp-cli/article_590.html</id>
		<link rel="alternate" type="text/html" href="http://fireball.loafer.jp/kes/cpp-cli/article_590.html" />
		<published>2007-10-30T23:55:00+09:00</published>
		<title type="html"><![CDATA[プラグインのロードと列挙]]></title>
		<updated>2007-10-30T23:55:00+09:00</updated>
	</entry>
	<entry>
		<author>
			<name>kes</name>
			<uri>http://loafer.jp</uri>
		</author>
		<category term="C++/CLI" scheme="http://fireball.loafer.jp/kes/cpp-cli/" />
		<content type="html">
<![CDATA[
<p>
プラグインとなるアセンブリはできたが、<br />
それをホストが見つけて読み込むためには、<br />
プラグインの登録方法をルール化しなければならない。
</p>
<p>
今回は、ホストのあるフォルダに「plugins」サブフォルダを作成し、<br />
その中にアセンブリを放り込むというルールにしよう。
</p>
<p>
早速、HelloSaver.dll と HelloSaver2.dll を放り込む。
</p>
<p>
+ scrhost.scr<br />
+ plugins\<br />
        + HelloSaver.dll<br />
        + HelloSaver2.dll
</p>
<a href="http://fireball.loafer.jp/kes/cpp-cli/article_572.html">続きを読む</a>
]]>
		</content>
		<id>http://fireball.loafer.jp/kes/cpp-cli/article_572.html</id>
		<link rel="alternate" type="text/html" href="http://fireball.loafer.jp/kes/cpp-cli/article_572.html" />
		<published>2007-10-29T23:52:00+09:00</published>
		<title type="html"><![CDATA[Manager マネージクラス]]></title>
		<updated>2007-10-29T23:52:00+09:00</updated>
	</entry>
	<entry>
		<author>
			<name>kes</name>
			<uri>http://loafer.jp</uri>
		</author>
		<category term="C++/CLI" scheme="http://fireball.loafer.jp/kes/cpp-cli/" />
		<content type="html">
<![CDATA[
<p>
HelloSaver を修正して ISaver2 を実装させても良いのだが、<br />
以前作った HelloSaver（HelloSaver.dll）はそのまま残しておき、<br />
新たに ISaver2 を実装した HelloSaver2 を作る。
</p>
<p>
これを HelloSaver2.dll という名前でビルドすれば、<br />
旧コードベースの HelloSaver.dll と、新しい HelloSaver2.dll を<br />
混在させた状態でテストすることができるだろうし。
</p>
<a href="http://fireball.loafer.jp/kes/cpp-cli/article_571.html">続きを読む</a>
]]>
		</content>
		<id>http://fireball.loafer.jp/kes/cpp-cli/article_571.html</id>
		<link rel="alternate" type="text/html" href="http://fireball.loafer.jp/kes/cpp-cli/article_571.html" />
		<published>2007-10-28T18:58:00+09:00</published>
		<title type="html"><![CDATA[HelloSaver2]]></title>
		<updated>2007-10-28T18:58:00+09:00</updated>
	</entry>
	<entry>
		<author>
			<name>kes</name>
			<uri>http://loafer.jp</uri>
		</author>
		<category term="C++/CLI" scheme="http://fireball.loafer.jp/kes/cpp-cli/" />
		<content type="html">
<![CDATA[
<p>
スクリーンセーバーを選択するリストボックスには何を表示すれば良いか。
</p>
<p>
スクリーンセーバーは ISaver を実装するクラスなのだが、<br />
現在の ISaver には、特別なプロパティがないため、<br />
クラスの FQCN くらいしか名前として使えそうなものがない。
</p>
<p>
そこで、ISaver に名前を得るためのプロパティ 'Name' を追加して、<br />
ISaver を実装するクラスから名前を取得する事ができるようにする。<br />
そして、ホストではこれをリストボックスに表示するようにしよう。
</p>
<p>
ただし、インタフェースを変更するのは御法度だ。<br />
開発用ライブラリ「Loafer.ScreenSaver.dll」を既にリリースしていた場合、<br />
既存のスクリーンセーバーは古い ISaver を実装してコンパイルされている。
</p>
<a href="http://fireball.loafer.jp/kes/cpp-cli/article_570.html">続きを読む</a>
]]>
		</content>
		<id>http://fireball.loafer.jp/kes/cpp-cli/article_570.html</id>
		<link rel="alternate" type="text/html" href="http://fireball.loafer.jp/kes/cpp-cli/article_570.html" />
		<published>2007-10-27T17:57:00+09:00</published>
		<title type="html"><![CDATA[スクリーンセーバのタイトル]]></title>
		<updated>2007-10-27T17:57:00+09:00</updated>
	</entry>
	<entry>
		<author>
			<name>kes</name>
			<uri>http://loafer.jp</uri>
		</author>
		<category term="C++/CLI" scheme="http://fireball.loafer.jp/kes/cpp-cli/" />
		<content type="html">
<![CDATA[
<div>
<a href="http://fireball.loafer.jp/kes?imagepopup=2/2007-09-13-23-54-0.jpg&amp;width=438&amp;height=120&amp;imagetext=%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0" onclick="window.open(this.href,'imagepopup','status=no,toolbar=no,scrollbars=no,resizable=yes,width=438,height=120');return false;" class="thumbnail"><img src="http://media.fireball.loafer.jp/thumbnail/2_2007-09-13-23-54-0.jpg" width="120" height="33" alt="プラグインダイアログ" title="プラグインダイアログ" /></a>
</div>
<p>
ISaver を実装しているプラグインが複数ある場合、<br />
実行に使うプラグインを決めなければならない。
</p>
<p>
これを決めるのはもちろん利用者なので、<br />
その設定を行うプラグイン管理画面が必要となる。
</p>
<p>
ということで、ホストのダイアログボックスを改造し、<br />
好きなプラグインを選択できるようにしてみよう。
</p>
<p>
リソースファイルを書き換え、<br />
スクリーンセーバーの名前と、<br />
ダイアログボックスの定義を書き換える。
</p>
<a href="http://fireball.loafer.jp/kes/cpp-cli/article_564.html">続きを読む</a>
]]>
		</content>
		<id>http://fireball.loafer.jp/kes/cpp-cli/article_564.html</id>
		<link rel="alternate" type="text/html" href="http://fireball.loafer.jp/kes/cpp-cli/article_564.html" />
		<published>2007-09-13T23:54:00+09:00</published>
		<title type="html"><![CDATA[プラグイン選択ダイアログ]]></title>
		<updated>2007-09-13T23:54:00+09:00</updated>
	</entry>
	<entry>
		<author>
			<name>kes</name>
			<uri>http://loafer.jp</uri>
		</author>
		<category term="C++/CLI" scheme="http://fireball.loafer.jp/kes/cpp-cli/" />
		<content type="html">
<![CDATA[
<p>
プラグインを動的に読み込む所から考えてみよう。
</p>
<p>
現在 Dispatcher.cpp では、#using ディレクティブを使い、<br />
&lt;HelloSaver.dll&gt; を直接参照しているため、<br />
以下のコード断片だけでインスタンスを作成できる。
</p>
<p>
&nbsp; &nbsp; // スクリーンセーバーを作成<br />
&nbsp; &nbsp; HelloSaver saver;
</p>
<p>
これを動的に読み込むように切り替えるためには、<br />
まず、HelloSaver.dll への依存を外さなければならない。<br />
そうなると、「HelloSaver」のように、<br />
プラグイン実装のクラス型を直接使うことはできないため、<br />
リフレクションを使ってアクセスすることになる。
</p>
<a href="http://fireball.loafer.jp/kes/cpp-cli/article_563.html">続きを読む</a>
]]>
		</content>
		<id>http://fireball.loafer.jp/kes/cpp-cli/article_563.html</id>
		<link rel="alternate" type="text/html" href="http://fireball.loafer.jp/kes/cpp-cli/article_563.html" />
		<published>2007-09-12T23:51:00+09:00</published>
		<title type="html"><![CDATA[プラグインの動的ロード]]></title>
		<updated>2007-09-12T23:51:00+09:00</updated>
	</entry>
	<entry>
		<author>
			<name>kes</name>
			<uri>http://loafer.jp</uri>
		</author>
		<category term="C++/CLI" scheme="http://fireball.loafer.jp/kes/cpp-cli/" />
		<content type="html">
<![CDATA[
<p>
次のステップに進むか。
</p>
<p>
現状のホストには大きな制限がある。<br />
それはリソースの問題だ。
</p>
<p>
スクリーンセーバーの名前とアイコンは、<br />
ホストに Windows のリソースとして埋め込まれる。<br />
これらは、プラグインで置き換えることはできない。
</p>
<p>
これにより生じる制約は以下の 2 つ。<br />
・表示するスクリーンセーバーの名前を変えられない<br />
・スクリーンセーバーのアイコンを変えられない。
</p>
<a href="http://fireball.loafer.jp/kes/cpp-cli/article_561.html">続きを読む</a>
]]>
		</content>
		<id>http://fireball.loafer.jp/kes/cpp-cli/article_561.html</id>
		<link rel="alternate" type="text/html" href="http://fireball.loafer.jp/kes/cpp-cli/article_561.html" />
		<published>2007-09-10T22:29:00+09:00</published>
		<title type="html"><![CDATA[ホストの改善 #1: 構想を練る]]></title>
		<updated>2007-09-10T22:29:00+09:00</updated>
	</entry>

</feed>
