[[開発メモ/P2P地震情報連携プラグイン]]
- [[n13i/libpwsplugin2net · GitHub:https://github.com/n13i/libpwsplugin2net]]

* しくみ [#seac8419]
- ラッパー部とプラグイン本体の2つのDLL
- Chararina本体はC++/CLIで書かれたラッパー部DLLをロード
- ラッパー部はChararina側の持つシステム関数等のラッパーを持つ
-- Chararina本体の関数をマネージオブジェクトでラップしてC#側から呼べるようにする
-- Chararina本体からのコールバックをC#側のメソッド呼び出しに翻訳する
- ラッパー部はプラグイン本体のアセンブリを読み込んでインスタンス生成

* ToDo [#m4b26340]
** プラグイン本体は別のAppDomainで動かしたい [#q54e0f4b]
- うまくいかない
-- Object^ obj = appDomain->CreateInstanceFromAndUnwrap(...);
-- IPlugin^ plugin = safe_cast<IPlugin^>(obj);
-- System.InvalidCastException: 透過プロキシを型 'PWSPlugin2Net.IPlugin' にキャストできません。 

** 複数アセンブリをロードしたい [#sfe95703]
- ラッパー部は1プラグインにしてプラグイン本体部を追加できるように
- 読み込み許可設定とか付けないとダメかも

** オンラインアップデート [#p8f90e7e]