私はこれを精査しており、正しいアプローチを確立できません。私の問題は次のとおりです。私はwinFormsアプリケーションを持っており、その中からintesive .dllを起動したいと考えています。私は何の問題 実行時に起動された.dll内からWindowsフォームを起動する方法
このような// Execute the method from the requested .dll using reflection (System.Reflection).
//[System.Runtime.InteropServices.DllImport(strDllPath)]
DLL = Assembly.LoadFrom(strDllPath);
classType = DLL.GetType(String.Format("{0}.{0}", ListUfCmdParams[1]));
classInst = Activator.CreateInstance(classType);
XmlExpInfo = classType.GetMethod(DllParams[0]);
XmlExpInfo.Invoke(classInst, paramObj);
// Return something.
return String.Format("Method '{0}' from '{1}{2}' successfully executed!",
ListUfCmdParams[2], ListUfCmdParams[1], strDotDll);
これは素晴らしい作品が、プロセスが呼び出されたが、とても時間がかかり、私は何が起こっているかをユーザに表示したいではありません、この使用するSystem.Reflectionを行うことができます。これを行うには、.dllファイルにprogressBarとその他の属性を持つWinFormを含めました。私はこれを行うときに例外が発生します。これは、 "Activator.CreateInstance()"がその作業を実行しようとしたときに発生します:MissingMethodException "抽象クラスを作成できません"。私は部分的なクラスを使用しているときにこのエラーに遭遇しました。私はクラスから "partial"キーワードを削除して.dllを正しく実行できるようにしなければなりませんでした。上記の "部分"キーワードを上記のwinFormsクラスから削除することはできません。質問は "私の.dll内からwinFormを呼び出すにはどうすればいいですか?" .dllは呼び出し元のアプリケーションから実行されるときにその進行状況を表示できますか?お時間を
おかげで、
ニック
Psと。私は、次のスレッドを読んでいると、彼らはややあいまいです:
A DLL with WinForms that can be launched from A main app
ら。
dllのメソッドインターフェイスを変更できるとすれば、上のコードから呼び出されたメソッドの引数としてプログレスバーを渡すことはできませんでしたか? – Christian
* partial *キーワードとは関係ありません。 * Reflectionを使用しないで*まず*動作させるようにしてください。その後、それをそのように保つことを検討してください。 –
これは合理的なアプローチのように聞こえるが、これは私が必要とするところではうまくいかない。これはジェネリックの.dllで動作しなければならず、これは呼び出し元をあまりにも具体的にするでしょう。私は、 "抽象クラス"は "部分クラス"宣言と関係がないことに感謝します。しかし、 "部分"キーワードは、コンパイラが叫んでいたものと、.dllが正しく呼び出されるために削除されなければならなかったものです。私は "Reflectionを使用しない"ためになるだろうが、私は管理された.dllのためにこれをどうやって行うのかをfamailarではない。すなわち.dllは.NETの下でC#を使用して作成されます。私はあなたがこれを行うことができると思った 'System.Relection'を使用しています。 – MoonKnight