2016-12-20 6 views
0

動的にロードされたDLLからメインのexeファイルにコールバックする方法のアイデアはありますか? (NB:このDLLは、コールバックした後、ある時点でアンロードされます)動的にロードされたDLLからのコールバック

コンテキストのC#

私は、そのコアを更新することができ、後に開発中のサービスのプロトタイプを作成しています。私は "main dll"へのサービスコールを行うスタブメインを持っています。私は、最新のDLLの新しいコピーが完了した後、コアdllをリロードするように指示するために、メインのexeにコールバックできるようにしたいと考えています。私は負荷を取り除く作業をしています。しかし、コールバックや、渡されたIntPtrの更新やその他の同様のアイデアを働かせることはできません。例えば。

loader.ExecuteStaticMethod(cMain_DLL, "Class1", "My_CallBack", new object[] {out _Count }); 

習慣Iは、DLLをロードおよびアンロードDLLを、ならびにコール機能に若干修正http://www.c-sharpcorner.com/uploadfile/girish.nehte/how-to-unload-an-assembly-loaded-dynamically-using-reflection/を使用している

をコンパイル。

 Type[] types = parameters.Select(o=>o.GetType()).ToArray(); 

     MethodInfo MyMethod = MyType.GetMethod(methodName, types); <= can retun null for some objects 
     MyMethod.Invoke(inst, BindingFlags.InvokeMethod, null, parameters, null); 
+0

http://stackoverflow.com/questions/2438065/c-sharp-reflection-how-can-i-invoke-a-method-with-an-out-parameter – apocalypse

答えて

1

リロードイベントのみが必要な場合は、EventWaitHandleをチェックしてください。あなたのスタブはWaitOne()そのハンドルと行動に応じて、サービスコールSet()に応じて対応することができます。

+0

私にURLまたは例を教えてください?私はあなたがどの部分がmain.exeにあり、どれがロードされたdllにあるのかを知るためにあなたが何を参照しているかに精通していません。おかげ –

+0

スタブ部分: 'VARのreloadEvent =新しいEventWaitHandle(偽、EventResetMode.ManualReset、「MyUniqueName '); ... //ロードライブラリ ... reloadEvent.WaitOne(); ... // reload here' ライブラリ部分: 'var reloadEvent = new EventWaitHandle(false、EventResetMode.ManualReset、" MyUniqueName '); //トリガーリロード reloadEvent.Set(); ' –

関連する問題