約 4,741,575 件
https://w.atwiki.jp/bwm_synthesis/pages/268.html
120:満月 2009/12/20(日) 23 42 09 ID Xg7ov7WtO 血や尿などの体液を使うものが殆どなのですが… もし少しでも「いやだ」「きたない」等と感じたら実行はオススメできません そう思う気持ちは術の効果を消してしまうので… 150:満月 2009/12/21(月) 11 56 34 ID xcSh1xwnO 先輩の術は何かと体液を使用するので、 そういったものに抵抗があれば術実行はおやめ下さい 148:満月 2009/12/21(月) 11 46 13 ID xcSh1xwnO 「相手を自分に夢中にさせる」類いのものです ・ローズorイランイランのお香 ・体液 雑貨店などにあるお香で構わないそうです 使用する前日にお香の側面に体液 (女性なら膣分泌液、男性なら精液)を 少量ぬり乾かして下さい 相手と部屋にいる時にそれを焚くだけです 必ず自分の部屋で行って下さい ちょっと余談ですが 片想いの相手が部屋にくる機会があればイランイランの アロマオイルを焚き、体にカシスかラズベリーの 香りを纏うと相手が自分に惹かれる様になります ↑これは私自身実行済みですがなかなか効果が あったのだと思います
https://w.atwiki.jp/furyouyuugi/pages/736.html
天ヶ瀬 縁 【図鑑225】 天ヶ瀬 縁(あまがせ えにし) SSR SSR-Max SSSR[覚醒] 「値段が高いって? 何なら実演してやってもいいぜ。」 「もちろん標的はアンタだけどな」 「武器の価値ってのは難しいよな。結局のところ、使い手次第。」 東京の裏社会を暗躍する武器商人。あらゆる武装の扱いに長け、その手の依頼を請け負うこともある。 要するに、アンタみてぇな雑魚には売らねぇってことだよ! コスト23成長型普通 Lv1⇒100⇒110攻撃4290⇒17160⇒19305防御4290⇒17160⇒19305特攻8040⇒32160⇒36180特防5600⇒22400⇒25200 前衛[智]弾幕売り尽くしセール消費手札P 30単体使用回数 2回[必殺][敵全員][使用毎に威力増加][智の構え 回数消費なし・気絶するまで前衛スキル使用時に智の構え+1][複数奥義効果][智の構え・暴の構え 智・暴の構え+1-2][2回] 後衛[智]極秘の流通ルート消費手札P 30単体使用回数 3回[増加][味方全員][智の構え・海王の構え準備時間短縮][準備時間短縮 智の構え・海王の構え+1][智の構え 回数消費なし][相手覚醒の構え・【諸刃】暴の構え 奥義時間短縮][3回] サポート[智]装填は速やかに単体使用回数 制限なし[確率発動][智・水威力・効果増加][確率で弾幕売りつくしセール使用回数増加][サポスキ発動確率固定解除][龍 効果増加] ・生存者気絶者問わず敵全員に極大ダメージを与える。・使用回数を重ねるごとに威力が特大アップする。・智の構え発動時、効果は受けるが残り有効回数を消費せず、自身が気絶するまで、前衛スキルを使用した時に智の構えの残り有効回数が0回でも智の構えの残り有効回数が1増える効果を自身に与える。・この効果は重ねがけはできない。・暴の構えの効果も受ける。・智の構えと暴の構え発動中に使用すると、智の構えと暴の構えの残り有効回数が1-2回増える。・レベルが上がると威力が増加する。 ・気絶者含む味方全員の全パラメータが特大アップする。・智の構えか海王の構え準備中に使用すると、準備時間を20秒短縮する。・準備時間を短縮した場合、智の構えと海王の構え発動時の有効回数が1回増える。・智の構え発動時、効果は得るが残り有効回数を消費しない。・敵チームが覚醒の構えか【諸刃】暴の構え発動中に使用すると、奥義時間を10秒短縮する。・同奥義の奥義時間の短縮は3回までしか効果がない。・レベルが上がると効果が増加する。 ・一定確率で智属性と水属性スキルの威力・効果が大アップし、[弾幕売りつくしセール]のスキル使用回数が残り0回の時、30%の確率で[弾幕売りつくしセール]のスキル使用回数が1回復する。・自身に発動確率固定の効果を受けたサポートスキルがある場合、高確率でその効果を1つ解除する。・自身のデッキに含まれる龍カードが多いほど効果が大アップする。・レベルが上がると発動確率と効果が増加する。 前衛[智]【役完成】戦略級武装セット消費手札P 30単体使用回数 2回[必殺][敵全員][使用毎に威力増加][智の構え 回数消費なし・気絶するまで前衛スキル使用時に智の構え・海王の構え+1][複数奥義効果][智の構え・暴の構え 智・暴の構え+1-2][フォーカード 手札P消費なし・手札P回復][役完成 フォーカード][2回] 後衛[智]【役完成】爆発デリバリー消費手札P 30単体使用回数 3回[増加][味方全員][複数奥義効果][焔帝の構え・嵐皇の構え・暴の構え 該当属性効果増加サポスキ発動][智の構え・海王の構え準備時間短縮][準備時間短縮 智の構え・海王の構え+2][智の構え 回数消費なし][相手覚醒の構え・【諸刃】暴の構え 奥義時間短縮][役完成 フォーカード][3回] サポート[智]硝煙弾雨単体使用回数 制限なし[確率発動][智・水威力・効果増加][確率で【役完成】戦略級武装セット使用回数増加][サポスキ発動確率固定解除][龍 効果増加][海王の構え・智の構え 発動率増加・確率で智の構えと海王の構え+1] 【使用後フォーカード完成】・生存者気絶者問わず敵全員に極大ダメージを与える。・使用回数を重ねるごとに威力が特大アップする。・智の構え発動時、効果は受けるが残り有効回数を消費せず、自身が気絶するまで、前衛スキルを使用した時に智の構えと海王の構えの残り有効回数が0回でも智の構えと海王の構えの残り有効回数が1増える効果を自身に与える。・この効果は重ねがけはできない。・暴の構えの効果も受ける。・智の構えと暴の構え発動中に使用すると、智の構えと暴の構えの残り有効回数が1-2回増える。・フォーカードが手札に揃っている状態でこのスキルを使用すると、手札Pを消費せず、手札Pが全回復する。・レベルが上がると威力が増加する。 【使用後フォーカード完成】・気絶者含む味方全員の全パラメータが特大アップする。・焔帝の構え・嵐皇の構え・暴の構え発動時は奥義の効果を受け、同属性スキルの効果が増加するサポートスキルも発動する。・智の構えか海王の構え準備中に使用すると、準備時間を20秒短縮する。・準備時間を短縮した場合、智の構えと海王の構え発動時の有効回数が2回増える。・智の構え発動時、効果は得るが残り有効回数を消費しない。・敵チームが覚醒の構えか【諸刃】暴の構え発動中に使用すると、奥義時間を10秒短縮する。・同奥義の奥義時間の短縮は3回までしか効果がない。・レベルが上がると効果が増加する。 ・一定確率で智属性と水属性スキルの威力・効果が大アップし、[【役完成】戦略級武装セット]のスキル使用回数が残り0回の時、30%の確率で[【役完成】戦略級武装セット]のスキル使用回数が1回復する。・自身に発動確率固定の効果を受けたサポートスキルがある場合、高確率でその効果を1つ解除する。・智の構えと海王の構え発動時は発動確率が更にアップし、低確率で智の構えと海王の構えの残り有効回数が0回でも智の構えと海王の構えが1回増える。・自身のデッキに含まれる龍カードが多いほど効果が大アップする。・レベルが上がると発動確率と効果が増加する。 後衛に継承枠有り 出現日20__/__/__取得方法
https://w.atwiki.jp/gardenkikaku/pages/494.html
神坂怜の記憶スキル。 「自身の「信仰」に関する記憶の一部」から取得。 自動発動スキル。 下記効果を使用可能。 ① 「甘言」「説得」「信用」を取得している場合、 成功値に+20上乗せされる。 ② セッション中、1d3回使用可能。 「盗み」をSP消費無しで使用することが出来る。 多才であり多弁であったヘルメスの加護を受けている事を思い出したことにより。 再度またその加護の効果が現れるだろう。 また泥棒神の別名からか盗みにも加護が現れる、 しかしその盗みも理由あってのもの、何度も盗みを働くことはできない。
https://w.atwiki.jp/gensougisaku/pages/129.html
『幻想戯作-Land of Amorphous-』をするにあたって、用意しておきたい物や覚えておきたい物をご紹介します。 こちらでは、概要を説明し、細かい個所はメニューのゲームの流れにて解説します。 用意するもの アーカイブ 2012年現在は、トライアルデッキ(炎属性)およびトライアルデッキ(水属性)のみが発売となっています。 こちらのどちらかを用意すれば問題ないです。 シンカウンタ TCG系のショップで販売しているカウンタやおはじきなどを使用するのがベストです。 紙での記載でも問題ないですが、このゲームはシンが複雑に動くので、カウンタを使った方がゲームをスムーズに運べます。 また、リマイジェスカウンタについては、サイコロやこのシンカウンタを一時拝借する形で進行するのが効率的かと思われます。 ライフカウンタ ユーザのライフポイントが残りどれだけのものかを調べるために必要なものです。 シン程激しく数値が上下しないので、紙への記載や電卓などで代用することが望ましいと思われます。 勝利条件 相手ユーザのライフポイントを「0」にする。 もしくは、アーカイブからカードがなくなった時点で敗北となります。 先攻は最初に攻撃が出来る有利さはありますが、ドロー系の効果を使っていない限り、先攻が敗北します。 ゲーム開始までの準備 自分が考えたカードを組み合わせたアーカイブを用意しておきます。アーカイブは必ず40枚ちょうどで製作し、且つ同じカードは3枚までとします。 トライアルデッキを購入した方は、そのままそれを使って問題ありません。 ゲームの開始から終わりまで 各ユーザの所持ライフポイントは250ポイントとなります。 まずは、アーカイブから両者7枚のカードを手元に持ちます。 次に、ユーザ同士が任意の方法で先攻後攻を決めます。 先攻を取得したユーザは、回帰フェイズでシンを「2」取得できますが、増加フェイズを行いません。 大まかな流れは下記のものとなります。 調整フェイズ群 ↓ 設置フェイズ群 ↓ 対決フェイズ群 ↓ 終焉フェイズ群
https://w.atwiki.jp/p2rdj/pages/1760.html
メイガス・アーキタイプ 《メイガスへの専念》 特技2 Magus Dedication アーキタイプ 専念 マルチクラス 出典 Secrets of Magic 75ページ アーキタイプ メイガス 前提条件 【筋力】14あるいは【敏捷力】14;【知力】14 君はメイガスとして呪文を発動する。君は自分で選択したコモンの秘術キャントリップを4つ収めた呪文書をを手に入れる。君は“呪文発動”連続行動を得る。君は呪文書から毎日2つのキャントリップを準備できる。君がメイガス・アーキタイプから新しいレベルの呪文スロットを得るたび、そのレベル以下の呪文を1つ、君の呪文書に追加する。君は秘術呪文攻撃ロールと秘術呪文DCを修得にする。メイガス・アーキタイプによる呪文のための君の重要呪文発動能力値は【知力】であり、それらは秘術メイガス呪文である。君は〈秘術〉を修得にする。君が既に〈秘術〉の修得なら、代わりに君が選択した技能1つを修得にする。君は単純武器を修得にする。 特殊 君はメイガス・アーキタイプから別に特技を2つ得るまで、別の専念特技を選択できない。 《基本武術魔法》 特技4 Basic Martial Magic アーキタイプ 出典 Secrets of Magic 75ページ アーキタイプ メイガス 前提条件 《メイガスへの専念》 君は選択した1レベルあるいは2レベルのメイガス特技を1つ得る。 《複合研究呪文》 特技4 Hybrid Study Spell アーキタイプ 出典 Secrets of Magic 75ページ アーキタイプ メイガス 前提条件 《メイガスへの専念》 君は自分が選択した複合研究1つから交錯呪文を1つ得る。君がまだ焦点化プールを持たないなら、1焦点化ポイントを持つ焦点化プールを得る。君は呪文書を研究し体を養生することで“再焦点化”を行える。君は複合研究から他の利益を得ることはできない。 《呪文撃の使い手》 特技4 Spellstriker アーキタイプ 出典 Secrets of Magic 75ページ アーキタイプ メイガス 前提条件 《メイガスへの専念》 君はメイガスの“呪文撃”連続行動を得る。君は1分経過することを持ってのみ、この連続行動を再チャージできる。この制約は君が“呪文撃”を再チャージする別の能力を得た場合であっても適用される。 “呪文撃”[two-actions] Spellstrike メイガス 出典 Secrets of Magic 37ページ 頻度 再チャージまで(後述) 君は拳や剣による突きに呪文を流し込み、複合的な攻撃を繰り出す。君は発動に1~2アクション必要で、呪文攻撃ロールを要求する呪文1つを“呪文発動”する。この呪文の効果は即座に発揮されず、君の攻撃に吹き込まれる。武器あるいは素手攻撃による近接“打撃”を1回行う。呪文は攻撃と連動し、“打撃”と呪文の両方の効果を決定する目的において、この攻撃ロールの結果を使用する。これは複数回攻撃ペナルティにおいて攻撃2回として扱うが、“呪文撃”が完了するまでペナルティは適用されない。呪文エネルギーの注入により、君の“打撃”は秘術特性を得て、魔法となる。 “呪文撃”を使用した後、君は精神集中特性を持つ単一アクションとして“呪文撃”を再チャージするまで再使用できない。また、君は発動に1アクション以上かかる交錯呪文を発動した際にも“呪文撃”を再チャージする。他の種別の焦点化呪文を発動しても、“呪文撃”は再チャージされない。 “呪文撃”の詳細 Spellstrike Specifics 基本的な“呪文撃”はほとんどの呪文のルールに従うが、拳や刃などの攻撃に搭載されることで、様々な修正が適用されてより複雑な呪文になる。 目標1体:通常は攻撃目標が2体以上にできる場合でも、呪文は君の“打撃”の目標のみを目標とする。一部の特技により、君はより多くのクリーチャーに影響を与えられるようになる。 間合い:連動させた呪文は君が“呪文撃”に使用した武器あるいは素手攻撃の間合いを用いて目標に効果を及ぼす。例えば、間合い武器を用いれば、ショッキング・グラスプは手の間合いより離れたところにいるクリーチャーに効果を及ぼし、呪文の距離がより長い場合でもレイ・オヴ・フロストは武器の間合いにいるクリーチャーにのみ作用する。 補助的な効果:呪文には、目標以外のクリーチャーに影響を与える可能性のある目標を取らない効果と、“打撃”が命中した瞬間から始まる継続的な効果が残っている。たとえば、アシッド・スプラッシュは目標以外のクリーチャーに飛散ダメージを与え、タングルフットの状況ペナルティは通常の継続時間だけ持続する。呪文は“打撃”がダメージを与えた後に効果を発揮する。“打撃”に他の特殊効果がある場合、GMはそれが呪文の前に起こるか後に起こるかを決定する。 複数の防護:ディスインテグレイト呪文の目標が試みる頑健セーヴなど、最初の呪文攻撃後の追加のロールは通常通り発生する。同様に、以降のラウンドでそれを使って再び攻撃できるようにする呪文は、“打撃”と最初の攻撃ロールを組み合わせるだけで、それ以降のものは組み合わせない。 不適切な目標と完全耐性を持つ目標:命中した目標が呪文の適切な目標でない場合でも呪文は使用されるが、目標は効果を発揮しない。目標が攻撃に完全耐性を持つが呪文には完全耐性を持たない場合、目標は通常通り呪文の効果を受ける。 様々なアクション:一部の呪文は、呪文発動に費やしたアクション数によって効果が異なる。“呪文撃”を使用する際、1アクション版または2アクション版の呪文の効果を使用するかどうかを選択する。呪文は正確に1アクションあるいは2アクションで発動できなければならない。フリー・アクション、リアクション、または3つ以上のアクションを必要とする呪文を“呪文撃”に使用することはできない。 呪文修正:呪文修正は次に行うアクションが“呪文発動”でなければならない。“呪文撃”は条件を満たさない組み合わせた連続行動であるため、通常は“呪文撃”に呪文修正を使用することはできない。 《高度武術魔法》 特技6 Advanced Martial Magic アーキタイプ 出典 Secrets of Magic 75ページ アーキタイプ メイガス 前提条件 《基本武術魔法》 君はメイガス特技を1つ得る。この前提条件を満たす目的において、君のメイガス・レベルは君のキャラクター・レベルの半分に等しい。 特殊 君はこの特技を複数回選択できる。選択するたびに、君は異なるメイガス特技を1つ得る。 《メイガスの基本呪文発動》 特技6 Basic Magus Spellcasting アーキタイプ 出典 Secrets of Magic 75ページ アーキタイプ メイガス 前提条件 《メイガスへの専念》 君はメイガスの基本境界呪文発動の利益を得る。 《メイガスの熟練呪文発動》 特技12 Expert Magus Spellcasting アーキタイプ 出典 Secrets of Magic 75ページ アーキタイプ メイガス 前提条件 《メイガスの基本呪文発動》;〈秘術〉の達人 君はメイガスの熟練境界呪文発動の利益を得る。 《メイガスの達人呪文発動》 特技18 Master Magus Spellcasting アーキタイプ 出典 Secrets of Magic 75ページ アーキタイプ メイガス 前提条件 《メイガスの熟練呪文発動》;〈秘術〉の伝説 君はメイガスの達人境界呪文発動の利益を得る。
https://w.atwiki.jp/zatchbell/pages/878.html
M-398 ガッシュ・ベル(ラウザルク発動時) 魔物 8000 バトル 「ラウザルク」を使わないと場に出せない。 自分は、この魔物の術を使えない。 《一瞬の勝機》を使ったターンのエンドフェイズに、このカードを下のカードを残して捨て札にする。 以上、枠囲み 《一瞬の勝機》使用を宣言する→このバトルの相手の攻撃を無効にする。 【スタンバイ】そうしたなら、このバトルの終了後、相手の魔本を1枚めくる。 パートナー=高嶺清麿 そして一気に...パートナーから本を奪いとれぇ!! ファウードの封印 バトルで負けそうになったら効果を発動すべし。 終盤で勝敗を左右する!? 場に出す条件を満たす「ラウザルク」は、S-364 ラウザルクとS-558 ラウザルクがある。 相互互換のカードになるため、使用にあたって異なる点はない。 ガッシュ・ベル(ラウザルク発動時)《嬉しい力》とは異なり、バトル中に使うことのできる効果となっている。 このカードを使用する場合、下の魔物の効果や攻撃呪文は使えなくなるので、ガッシュ・ベルを攻め手として使う場合には、計算がしづらい面がある。 相手が攻撃をしてこなければ、捨て札にできないため、積極的に効果を使い捨て札にすることもできない。 W魔物やVS魔物に入れ替えることは可能なので、入れ替えるのを見越して使用するのが良いか。 効果は、相手の攻撃を無効にし、さらには、魔本も1枚めくれるというもの。 相手が防御ページでターンを終える時、次のターン、攻撃ページで相手の動きに対応するため、相手は、無防備な状態になる。 ただし、使用するタイミングが重要で、高嶺清麿《コンボ》等の魔本をめくる効果で、連続して攻撃する相手には、逆に相手の助けになる可能性もある。 相手の次のページが、防御ページだと読めるような展開で使用するのが良いだろう。 収録パック ファウードの封印 タグ:8000 ガッシュ・ベル バトル 相手の魔本を1枚めくる 魔本めくり 魔物
https://w.atwiki.jp/k-os/pages/800.html
英名:Absorb Symbol レアリティ:C 絵師:斉藤コーキ 番号:BS05-072 収録:ブースター05-皇騎 コスト:4 軽減:3 シンボル:紫 種類:マジック 『フラッシュ』 このターンの間、相手のスピリットすべては、スピリット/ネクサス/マジックの効果で コアを置く、または取り除くと疲労する。 備考/性能 疲労効果/コア操作トリガー 敵スピリット上のコア移動を条件とするため、コア除去を得意とするスピリットとのコンボが前提となる。 単体では使い道は相手が覚醒/グレートリンク/ネイチャーフォースなどを 使用するケースに限られてくるので腐りやすい。 公式Q&A/ルール 更新:110201/Q1-2 Q.1 このマジックの効果を使った後に、ポイズンシュートを使って相手のスピリットの上に置かれていたコアを「リザーブ」に移動させたら、そのスピリットは疲労するの? A.1 はい、疲労します。また、コアを取り除かれたときだけではなく、スタッグローブなどの効果でコアが置かれたときにも疲労します。 Q.2 このマジックの効果を使う前に、スピリット/ネクサス/マジックの効果でコアを置く、または取り除かれたスピリットも、このマジックの効果を使った時点で疲労するの? A.2 いいえ、疲労しません。このマジックを使った後にコアを置く、または取り除かれたスピリットだけが対象になります。 エピソード/キャラクター イラスト関連項目:悪戯妖精インプ ここを編集 BS05-紫へ戻る
https://w.atwiki.jp/ocg-o-card/pages/5459.html
part14-419 レベルアップへの布石 モンスター保護区域 ソウルドレイン 《レベルアップへの布石》 通常魔法 自分のデッキから「LV」と名の付くモンスター一体を選択し、自分の手札に加える。 part14-419 名前 コメント 《モンスター保護区域》 永続魔法 このカードがフィールド上に存在する限り、 モンスターを破壊する効果を持つ魔法・罠・モンスターの効果を使用することは出来ない。 part14-419 名前 コメント 《ソウルドレイン》 装備魔法 装備モンスターが戦闘でモンスターを破壊し墓地へ送った場合、 破壊したモンスターの攻撃力分だけ自分のライフポイントを回復する事が出来る。 part14-419 名前 コメント
https://w.atwiki.jp/yugio/pages/15005.html
メガロイド都市(OCG) フィールド魔法 このカード名の(1)(2)の効果はそれぞれ1ターンに1度しか使用できず、 この効果を使用するターン、自分は融合モンスターしかEXデッキから特殊召喚できない。 (1):このカード以外の自分フィールドのカード1枚を対象として発動できる。 そのカードを破壊し、デッキから「ロイド」カード1枚を手札に加える。 (2):自分の「ロイド」モンスターが戦闘を行うダメージ計算時に、デッキから「ロイド」モンスター1体を墓地へ送って発動できる。 その戦闘を行う自分のモンスターはそのダメージ計算時のみ、元々の攻撃力と元々の守備力が入れ替わる。 デッキサーチ デッキ圧縮 フィールド ロイド補助 融合モンスター補助 魔法
https://w.atwiki.jp/lookworld/pages/75.html
0. このドキュメントについて この資料では、Visual Basic 6.0から.NETで作成したクラスをCOMとして利用する為の方法について説明する。.NET側の言語はC#を用いるが、他の言語にも応用可能である。 同様の情報が「.NET COM 相互運用」のようなキーワードでネットやヘルプ等の様々な場所に点在しているが、VBから.NETを利用するという観点で通して説明した資料が見つからなかった為、自分なりの解釈でそれらをまとめたものである。 解釈が間違えている箇所もあると思われるので、お気づきの点は shinde@sev.or.jp までご連絡頂ければ幸いである。内容については各自の責任で利用されたい。 目次 1. 最も簡単にVB6から.NETコンポーネントを利用する方法 2. VB6上で実行できるようにする 3. DLLの共有方法 3.1 会社固有のキー・ペアを作成する 3.2 DLLに遅延署名する 3.3 グローバルアセンブリキャッシュ(GAC)に登録する 3.4 VB6から利用できるようにする 3.5 署名を行う 4. その他の問題を解決する 4.1 最新のタイプライブラリを使ってコンパイルすると、実行時エラー429が発生する 4.2 VB6のコード補完が使えない 4.3 イベントをVB6から利用できない 5. 参考文献 1. 最も簡単にVB6から.NETコンポーネントを利用する方法 (1) .NETのDLLを作成する。 まず、VB6から利用したい.NETのクラスをコンパイルし、DLLにする。 DLLにするにはプロジェクトの新規作成時に「クラス ライブラリ」を選択すれば良い。例) DotNetCOMTest.dll DotNetCOMTestClass void TestA() - メッセージボックスを表示する。 このDLLはVB6.exeと同じディレクトリに置いておく。 (2) COMとして利用できるように、レジストリに登録する。 VB6から利用する為に、.NETのDLLをCOMとして利用できるようにレジストリに登録する。 これをやってくれるのがregasmコマンドである。 % regasm DotNetCOMTest.dll ※regasm.exeは、.NET Framework ランタイムに含まれる("WINNT\Microsoft.NET\Framework"以下の各バージョンのフォルダに存在する)。 (3) tlbexp コマンドで、タイプライブラリ(*.tlb)を作成する。 VB6の統合開発環境から利用する為にはタイプライブラリというクラスの型情報を持つファイルが必要である。 これを生成するのがtlbexpコマンドである。% tlbexp DotNetCOMTest.dll /out DotNetCOMTest.tlb ※tlbexp.exeは、.NET Framework SDKに含まれる(\Program Files\Microsoft.Net\ FrameworkSDK\Bin か、VS.NETインストールフォルダ内の同場所に含まれる)。 この結果、同じディレクトリにDotNetCOMTest.tlb が作成される。 (4) VB6のプロジェクトから参照設定する。 VB6の「参照設定」からDotNetCOMTest.tlb を読み込む。 これでVBの統合開発環境上で各クラスを呼び出す準備が整った事になる。 (5) VB6から.Netクラスを生成し、呼び出す。 VB6のフォームにボタンを貼り付け、ボタンのClickイベントに次のようなコード を書く。 尚、クラス名以外のコード補完機能は働かない為注意が必要だ(コード補完機能を使えるようにするには4.を参照)。 VBソースコード(Form1) Private Sub Command1_Click() On Error GoTo Err_Proc Dim obj As DotNetCOMTest.DotNetCOMTestClass (a) Set obj = New DotNetCOMTest.DotNetCOMTestClass (b) Call obj.TestA (c) Exit Sub Err_Proc MsgBox Err.Description End Sub (a) DotNetCOMTestパッケージの、DotNetCOMTestClassの変数objを宣言する。 (b) DotNetCOMTestClassを生成し、objに代入する。 (c) objのTestAメソッドを呼び出す。 (6) プロジェクトをコンパイルし、exeを作成する。 exeを実行してボタンをクリックするとTestAが呼び出される事を確認する。 尚、VB6上から直接実行すると、クラスが見つからない旨のエラーになる。 VB6上から実行できるようにするには2.または3.を行う必要がある。 2. VB6上で実行できるようにする VB6上から直接実行するとエラーになるのは、VB6から実行する際にはカレントフォルダがVB6.exeのフォルダになっており、DLLをVB6が見つけられない為である。 対策は、DLL(ここではDotNetCOMTest.dll)をvb6.exeと同じフォルダにコピーするだけでよい。 ※DotNetCOMTest.dllが参照している他のDLLがあればそれもコピーする。 このやり方でも特に問題はないが、このDLLが他のアプリケーションからも使われる「共有DLL」である場合は3.の対処を行う必要がある。3.の対処を行う場合は2.の対処は不要である。 コラム:共有DLLは必要か? 「3.DLLの共有方法」で説明しているDLLの共有方法は、昔ながらのCOMの共有方法に近い。 しかし、本来.NETの思想ではDLLはそれぞれのアプリケーションにローカルにすべきであり、共有を避けることによって「DLL地獄」に陥らないようにしたり、「XCOPYインストール」を実現したりするのが本筋であろう。 「3.DLLの共有方法」で確かに共有は実現されるが、代償としてそのアプリケーションのインストール時にGACにアクセスしなければならなくなる。GACにアクセスするためのツールであるgacutil.exeは.NET SDKをインストールしなければ存在しない為、VBアプリケーションの配布が非常に面倒になる。 では一般に.NET DLLを利用するVBアプリケーションを配布するにはどうすればいいのかというと、このドキュメントの1.と2.で説明した通り、配布したいVB用アプリケーションのexeと同じフォルダに.NET DLLを配置してregasm.exeを実行すればいいだけである。regasm.exeは.NETランタイムをインストールすれば一緒にインストールされる。 複数のアプリケーションから共有したい場合は、それぞれのアプリケーションフォルダにDLLをコピーすれば良い。一箇所にDLLをまとめたいのであれば、そのVBアプリケーション用の「アプリケーション構成ファイル」を作成してcodebase属性でDLLの位置を指定すれば良い。 「3.DLLの共有方法」は、最後の手段と考えておくべきである。 ※参考:<codebase>属性 http //www.microsoft.com/japan/msdn/library/default.asp? url=/japan/msdn/library/ja/cpgenref/html/gngrfcodebase.asp ※アプリケーション構成ファイルについて ちなみに、アプリケーション構成ファイルは「exe名.config」という名前で作成すればOKだが、これは.NETアセンブリを利用するVBアプリケーションにもそのまま当てはまる。 つまり、「MyVBApp.exe」というVBアプリなら、「MyVBApp.exe.config」という名前で作成すれば良い。codebase属性などについては上記URLを参照のこと。 ※DLLの配布の際は、4.1の問題点についても対処しておくこと。 3. DLLの共有方法 COMの場合、system32フォルダに置いてregsvr32を実行することでDLLを共有できた。 .NETにも共有の仕組みが用意されている。 DLLを共有化すると、どのアプリケーションからでもそのDLLを利用することができる。但し、どうしても共有しなければならない理由がない限り、DLLは各アプリケーションにローカルにしておいた方が良い。 共有化するためにはグローバルアセンブリキャッシュ(GAC)にDLLを登録すれば良い。 しかし、GACに登録する為にはDLLに対して先に「署名」を行うことにより厳密名をつける必要がある。 署名を行う為には「キー・ペア」と呼ばれるものが必要になる。 ここでは開発時のキー・ペアの運用を考慮して、遅延署名と呼ばれるテクニックを用いた手順を詳しく解説する。 この方法はDLLに対して厳密名を付ける方法としても参考にして良い。 尚、既にDLLが完成していて後は共有するだけ、という場合は以下の項目だけを実行すれば良い。 3.1(1) キー・ペアを作成する。 3.2(2) 公開キーを使って遅延署名する。 (※3.1(1)のキー・ペアを使って正式署名をすれば良い) 3.3(2) GACに登録する。 3.4(1) system32フォルダにDLLをコピーする。 3.1 会社固有のキー・ペアを作成する。 (1) キー・ペアを作成する。 % sn.exe -k companyname.snk ※sn.exeは、.NET Framework SDKに含まれる(\Program Files\Microsoft.Net\ FrameworkSDK\Bin に含まれる)。 この結果、カレントフォルダにcompanyname.snkが作成される。 このキー・ペアは他に漏れないよう厳重に保管する必要がある。 また、このキー・ペアは会社固有のキー・ペアとして全てのDLLに対しての署名用に用いる。 3.2 DLLに遅延署名する。 キー・ペアは非常に機密性の高いファイルである為、DLLをコンパイルする度にこのファイルを持ち出していたのでは機密性を保持するのは大変である。 これを回避する為に「遅延署名」というテクニックが用意されている。これはキー・ペアから「公開キー」のみを取り出し、これを使って擬似的に署名を行うものである。 ちゃんとした署名は開発の終了時に行う。 (1) キー・ペアから公開キーを取り出す。 % sn.exe -p companyname.snk companyname_public.snk この結果、companyname_public.snkが作成される。このキーは公開用のキーなので誰に配っても良い。 この後、この公開キーを使ってDLLに「遅延署名」を行う。 コラム: 「キー・ペア」とは何か? 「キー・ペア」とは暗号化方式の一つである「公開鍵暗号化方式」の用語である。 よく知られる「秘密鍵暗号化方式」では一つの暗号化キーを使って暗号化と復号を行うが、公開鍵暗号化方式では「個人鍵」と「公開鍵」という二つの暗号化キーのペアを用いる。 これがキー・ペアと呼ばれる由縁である。 個人鍵を使って暗号化された文書は、対となる公開鍵でしか復号できない。また、公開鍵を使って暗号化された文書は対となる個人鍵でなければ復号できない。 例えばA氏が自分の個人鍵を使って暗号化した文書は、A氏が公開している公開鍵を使ってしか復号できない為、その文書がA氏のものだという証拠となる(もちろん個人鍵は厳重に管理されているという前提がある)。 逆にA氏に秘密の文書を送りたい場合は、送信者がA氏の公開鍵を使って暗号化し、A氏に送れば良い。A氏は自分の個人鍵を使って復号することができるが、他の人がもしこの文書を入手しても復号することはできないのである。 これを署名検証に応用する場合、目的は「対象のアセンブリが正式に署名されたものかを確認する」ことである。その為には、アセンブリ自身に、アセンブリのハッシュをアセンブリの個人鍵で暗号化したものと公開鍵を持たせておけば良い。検証する側は、自分が持っている公開鍵を使ってその暗号文を復号し、それがアセンブリのハッシュと一致すれば、身元が正しい事を証明できる。もちろんこれは、検証する側がそのアセンブリの正しい公開鍵を事前に知っている場合に限られる。(実際にはもっと複雑な手順を踏んでいると思われる)。 (2) 公開キーを使って遅延署名を行う。 公開キー(companyname_public.snk)をプロジェクト(又はソリューション)フォルダに配置する。 VS.NETのプロジェクト(又はソリューション)を開き、AsemblyInfo.cs に以下の記述を追加する。 AssembyInfo.cs(一部) [assembly AssemblyDelaySign(true)] // falseにすると正式に署名される。 [assembly AssemblyKeyFile(@"..\..\..\companyname_public.snk")] これでコンパイルすれば、DLLに遅延署名がされる。 尚、AssemblyKeyFile属性はDLLの出力先からの相対パスとなるので、各環境に合わせて変更しなければならない。 また、署名された(厳密名を持った)DLLは厳密名を持ったDLLしか参照できない為、必要ならばそれらも署名する必要がある。 3.3 グローバルアセンブリキャッシュ(GAC)に登録する。 (1) 署名検証機能をオフにする。 遅延署名されたDLLは公開キーを持っているだけで、実際には有効な署名がされているわけではない。よって、DLLのロード時の署名検証時にエラーとなって しまう。 以下の方法で.NET Frameworkの署名検証機能をオフにする必要がある。この処理は.NET Frameworkに対して行われるものであり、DLLそのものに何らかの変更がされる訳ではない。よって、オフにしたい全ての環境でこれを実行しなければならない。% sn.exe -Vr DotNetCOMTest.dll ところで、「こんなことができるのなら、遅延署名など使わず最初から署名検証機能をオフにすればよかったのに」と思う人がいるかもしれないが、なんらかの形で署名されていないとGACへの登録そのものができない為、面倒だがしょうがない。 (2) グローバルアセンブリキャッシュ(GAC)に登録する。 % gacutil -i DotNetCOMTest.dll ※gacutil.exeは、.NET Framework SDKに含まれる(\Program Files\Microsoft.Net\ FrameworkSDK\Bin に含まれる)。 尚、登録解除は以下の通り。 % gacutil -u DotNetCOMTest DLLから参照している他のDLLがあるならば、全てGACに登録しなければならない。 3.4 VB6から使用できるようにする。 (1) system32フォルダにDLLをコピーする。 DLLを、system32フォルダ(又はパスが通っているフォルダ)にコピーする。 その後、1.と同様の処理を行えばよい。 3.5 署名を行う。 遅延署名されたDLLは出荷前にちゃんとしたキー・ペアを使って署名しなければならない。 (1) 遅延署名DLLへ署名する。 % sn.exe -Rc DotNetCOMTest.dll companyname.snk (2) 署名検証機能をオンにする。 開発環境においては必ずしも行う必要はないが、正式に署名されたDLLの署名検証 機能をオンに戻すのは以下の方法で行う。% sn.exe -Vu DotNetCOMTest.dll 4. その他の問題を解決する 4.1 最新のタイプライブラリを使って再コンパイルすると、実行時エラー429が発生する。 DLL側の開発中は、頻繁にDLLそのものやタイプライブラリが更新されることになる。 ところが更新されたタイプライブラリをVBに読み込んで再コンパイルしたexeを実行すると、実行時エラー429が発生する場合がある。 regasmを使ってDLLを再登録するとこのエラーは起こらなくなる。しかし、DLLが更新されるたびにregasmを行っていたのでは非常に面倒であるし、配布もしづらい。 これは以下のような理由から起こる。 タイプライブラリを生成すると、クラスの固有キーがCLSIDとして生成され、タイプライブラリに埋め込まれる。既定ではこのCLSIDは毎回違うものになる為、タイプライブラリに埋め込まれるCLSIDも毎回異なることになる。 regasmによってレジストリに登録される.NETクラスのキーはこのCLSIDであり、exeはこのCLSIDを用いて.NETクラスを探しに行く。最新のタイプライブラリ(つまり新しいCLSID)を使ってコンパイルされたexeがいくらレジストリを探しても、まだregasmされていない.NETクラスは見つけられないのである。 これを回避する為にはクラスやインターフェイスに対してGUID属性を指定すれば良い。 [GuidAttribute("25731EF3-88ED-4322-9A90-E665598A4889") ] public class Person IPerson { ※GUIDは、[ツール]メニューから「GUIDの生成」を使って生成できる。 これによりCLSIDは固定となり、いちいちregasmを行う必要はなくなる。 4.2 VB6のコード補完が使えない。 そのままの設定だと.NETのクラスに対してはVB6のコード補完が働かない。これについては以下のように対処可能であるが、いくつか問題もある。 (1) ClassInterface属性にClassInterfaceType.AudoDualを設定する。 [ClassInterfaceAttribute(ClassInterfaceType.AutoDual)] public class Person この属性値を指定すると、そのクラスのメンバが全てVB6のコード補完から使えるようになる。 具体的にはAutoDualは全てのメンバのインターフェイスをタイプライブラリに記述する、つまり事前バインディングを可能にする指定である。 しかしこれには重大な欠点がある。そのクラスのメンバのレイアウト(メンバの順番など)を変更すると、事前バインディングのインターフェイスも変わってしまうのだ。例えばクラスのメンバAとBの間にメンバXを加えたら、それまで動いていたアプリケーションが全て動かなくなってしまう。メンバAとBの順番を変えただけでも同様の結果になる。毎回全てのアプリケーションを再コンパイルするのは、開発時は問題ないとしても、一旦リリースしてしまった場合などは困難である。 開発時のみの属性値だと思った方が良さそうである。(MSも、この属性値は「推奨しない」と言っている) (2) ClassInterface属性にClassInterfaceType.AutoDispachを設定する。 [ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)] public class Person この属性値を指定してもコード補完は働かない。それもそのはず、この属性値は既定値だからである。何も指定しなければ自動的にAutoDispatchとなる。 具体的にはAutoDispatchは全てのメンバのインターフェイスをタイプライブラリに「記述しない」、つまり事前バインディングをできないようにする指定である。逆に言えば、遅延バインディング(実行時バインディング)に限定することになる。 こうする事には理由がある。(1)の説明を読めばお分かりと思うが、事前バインディングを用いるとクラスのレイアウト変更に非常に弱くなってしまうからである。事前バインディングでなく遅延バインディングを用いることで、クラスのレイアウト変更とは完全に切り離すことができる。 (3) ClassInterface属性にClassInterfaceType.Noneを設定する。 [ClassInterfaceAttribute(ClassInterfaceType.None)] public class Person IPerson コード補完は使いたい、でもAutoDualは問題がある・・・このちょうど中間がNoneである。 Noneは、そのクラスが実装しているインターフェイス(ここではIPerson)のみを事前バインディング可能にする指定である。これだけならAutoDualと同じ問題が起きそうだが、Noneの良いところはクラス側のレイアウト変更が外部に影響を及ぼさない点である。IPersonのレイアウトのみが外部に影響する。 よって、Noneを用いるのは「COM公開用のインターフェイスが決まっており、今後も変更しない事が決まっている場合」 に限られる。これはCOMの思想と合致しており、あくまでもCOMとして利用するためのDLLであればこれで問題ないと思われる。 4.3 イベントをVB6から利用できない。 .NETのクラスでイベントを発生させ、VBのクライアントからそれを受け取る・・・いかにも楽しそうなこのテクニックが、単に.NETのクラスにeventを定義しただけでは行えない。 VB側でWithEventsステートメントを使っても、そもそもコード補完のリストに該当のクラスが現れないのである。 イベントの利用はなぜか面倒な手続きが必要となっている。 まず、そのイベントと同じ引数と名前のメソッドを持つインターフェイス(ここではPersonEvents)を定義し、以下のような属性を指定する。 public delegate void PersonEventHandler( string name );[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] public interface PersonEvents { void NameChanged( string name ); } public class Person { public event PersonEventHandler NameChanged; 次に、ComSourceInterfaces属性を使ってクラス側にそのインターフェイス名を指定する。 public delegate void PersonEventHandler( string name ); [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] public interface PersonEvents { void NameChanged( string name ); }[ComSourceInterfaces("DotNetCOMTest.PersonEvents, DotNetCOMTest")] public class Person { public event PersonEventHandler NameChanged; ComSourceIntarfaces属性値の引数は、最初がイベント用に定義したインターフェイス名、二番目がそのインターフェイスが存在するアセンブリ名である。 これでVB6からイベントを利用できるようになる。 5. 参考文献 Microsoft .NET Framework SDK クイックスタートチュートリアルhttp //ja.gotdotnet.com/quickstart/default.aspx 解説 インサイド .NET Framework (@IT記事)http //www.atmarkit.co.jp/fdotnet/technology/index/index.html 高度なCOM相互運用機能 - クラス インターフェイスの概要 http //www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/ cpguide/html/cpconintroducingclassinterface.asp 高度なCOM相互運用機能 - COMシンクによって処理されるイベントの発生 http //www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/ cpguide/html/cpconraisingeventshandledbycomsink.asp 著者: 株式会社アイジュピタ 新出 純壱( shinde@sev.or.jp )