C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: C#でプラグインの実装とシリアライズ


(過去ログ 14 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■4410 / inTopicNo.1)  C#でプラグインの実装とシリアライズ
  
□投稿者/ 倉田 有大 (15回)-(2007/06/16(Sat) 15:16:47)

分類:[C# (Windows)] 

2007/06/16(Sat) 15:17:36 編集(投稿者)

プロジェクト1 DLL
/////////////////////////////////////////
namespace PluginGraphicFilter
{
[Serializable]
abstract public class AbstractPluginGrapchiFilter
{
abstract public int test();
}
}
/////////////////////////////////////////
プロジェクト2 DLL
namespace PluginGraphicFilter
{
[Serializable]
public class PluginGraphicFilter : AbstractPluginGrapchiFilter
{
public int a = 2;
public override int test()
{
return a;
}
}
}
/////////////////////////////////////////
上記二つのプロジェクトでDLLを作成します。

/////////////////////////////////////////
namespace GraphicFilterTest
{
class Program
{
static void Main(string[] args)
{
//DLL読み込み
Assembly a = Assembly.LoadFrom("BrightnessPluginFilter.dll");
Type t = a.GetType("PluginGraphicFilter.PluginGraphicFilter");
//インスタンス作成
PluginGraphicFilter.AbstractPluginGrapchiFilter o = Activator.CreateInstance(t) as PluginGraphicFilter.AbstractPluginGrapchiFilter;
SoapFormatter formatter = new SoapFormatter();
string path = "c:\\abc.xml";
System.IO.File.Delete(path);
Stream stream = new FileStream(path, FileMode.OpenOrCreate);
//シリアライズ
formatter.Serialize(stream, o);

//デシリアライズ
Stream stream = new FileStream(path, FileMode.Open);
PluginGraphicFilter.AbstractPluginGrapchiFilter oo = (PluginGraphicFilter.AbstractPluginGrapchiFilter)formatter.Deserialize(stream);

}
}
}
/////////////////////////////////////////
で、こんな感じでプラグインフィルターをシリアライズしてさらにデシリアライズでうまく動作したのですが、
ここで疑問があります。

一度シリアライズしたファイルを

SoapFormatter formatter = new SoapFormatter();
string path = "c:\\abc.xml";
Stream stream = new FileStream(path, FileMode.Open);
PluginGraphicFilter.AbstractPluginGrapchiFilter oo = (PluginGraphicFilter.AbstractPluginGrapchiFilter)formatter.Deserialize(stream);

こんなかんじでBrightnessPluginFilter.dllを読み込まなくてもデシリアライズできるのですが、
いったい何時BrightnessPluginFilter.dllの本体をよみこんでやっているのでしょうか?
引用返信 編集キー/
■4411 / inTopicNo.2)  Re[1]: C#でプラグインの実装とシリアライズ
□投稿者/ Hongliang (147回)-(2007/06/16(Sat) 15:31:08)
Hongliang さんの Web サイト
AppDomain.CurrentDomain の AssemblyLoad イベントを使えばいつアセンブリがロードされたかわかるかと。
引用返信 編集キー/
■4414 / inTopicNo.3)  Re[2]: C#でプラグインの実装とシリアライズ
□投稿者/ 倉田 有大(UNYORA) (1回)-(2007/06/16(Sat) 16:01:30)
No4411 (Hongliang さん) に返信
> AppDomain.CurrentDomain の AssemblyLoad イベントを使えばいつアセンブリがロードされたかわかるかと。

AppDomainというのがあるのですね、ありがとうございます。今日はばてましたので、明日調べてみます^^;
この場合abc.xmlにBrightnessPluginFilter.dllの場所が記述されているのかな。うーん
引用返信 編集キー/
■4416 / inTopicNo.4)  Re[3]: C#でプラグインの実装とシリアライズ
□投稿者/ 倉田 有大 (16回)-(2007/06/16(Sat) 16:28:01)
No4414 (倉田 有大(UNYORA) さん) に返信
> ■No4411 (Hongliang さん) に返信
>>AppDomain.CurrentDomain の AssemblyLoad イベントを使えばいつアセンブリがロードされたかわかるかと。
>
> AppDomainというのがあるのですね、ありがとうございます。今日はばてましたので、明日調べてみます^^;
> この場合abc.xmlにBrightnessPluginFilter.dllの場所が記述されているのかな。うーん


ありがとうございます、abc.xmlにdllのパスがかかれているのですね。

http://schemas.microsoft.com/clr/nsassem/PluginGraphicFilter/BrightnessPluginFilter%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull"

これかな?
絶対パスなのか相対パスなのか、ファイルのぞいてもわかりませんでした^^;たぶん相対パス?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -