0

C# dll をロードしてそこからエントリ ポイントを見つける方法は?

次のコードを使用してライブラリをロードしました

    string str = @"D:\MyDLL.dll";
    str = Path.GetFullPath(str);
    Assembly assembly = Assembly.LoadFile(str);
4

1 に答える 1

4

1つの方法は

string str = @"D:\MyDLL.dll";
str = Path.GetFullPath(str);
Assembly assembly = Assembly.LoadFile(str);

string args = {"a", "b"}; //command line args that you need to pass

MethodInfo publicStaticVoidMain = assembly.EntryPoint;
publicStaticVoidMain.Invoke(null, args);

プロセスに別のアプリドメインを含めることをお勧めします。しかし、それは必要ではありません。

編集:

ここに続いた議論からの抜粋です。

  1. 実際にはさまざまな種類の DLL があります。どのタイプの DLL について話しているのかを正確に知る必要があります。dot-net DLL は WIN32 dll とは異なります。
  2. entry-pointは通常、dll で定義されたメソッドです。WIN32 または dot-net のいずれかのオプションです。
  3. dot net コードは dot-net dll に最適です。
  4. dot-net dll にエントリ ポイントがない場合。assembly.EntryPointnull を返します。存在する場合はinvoke、エントリポイントを呼び出してそこに入ることができます。
  5. dot-net EXE も dot-net DLL のように動作します (名前を変更して DLL のように見せることもできます)。EXE (名前が変更されていても) には、そのエントリ ポイントが含まれていることが確実です。
于 2013-06-19T07:27:03.847 に答える