楽にunmanaged dllをダイナミックローディングしたい
http://www.codeproject.com/csharp/dynamicinvokedll.asp
ダイナミックローディングにはこんな方法があるよ、と。ここから妄想。
たとえば
interface IHoge { void Hage([MarshalAs(...)]string str); int Fuga(int,int); }
なんてインタフェースだけ定義しておけば、あとは
IHoge hoge1=DynamicLoader.Load<IHoge>("hoge1.dll");
てな具合に呼んでやるだけで自動的に
class Hoge1 : IHoge{ public void Hage(string str) {HageNative(str);} public int Fuga(int a,int b) {return FugaNative(a,b);} [DllImport("hoge1.dll",EntryPoint="Hage")]static void HageNative([MarshalAs(...)]string str); [DllImport("hoge1.dll",EntryPoint="Fuga")]static int FugaNative(int a,int b); }
てなクラスを定義&そのインスタンスを返すような関数をつくることが可能なはずです。と思ってCodeDOMと少々格闘していたのですがかなりめんどくさそう(特にカスタム属性のあたりが)でコード生成までたどりつきませんでした。やれやれ。冷静に考えると、特にunmanaged dllをダイナミックローディングしたい理由もな…… いやあったよ!そもそもrubyのdll(コンパイル環境とかでファイル名まちまち)をなんとかしたかったんだった。でもだるいからファイル名きめうちでいくとおもう。