0

如何加载 C# dll 并从中找到入口点?

我使用以下代码加载库

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

1 回答 1

4

一种方法是

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);

我建议在此过程中涉及一个单独的 appdomain。但这不是必需的。

编辑:

以下是这里的辩论节选。

  1. 在野外有不同类型的 DLL。您必须非常清楚您在谈论哪种类型的 DLL。dot-net DLL 与 WIN32 dll 不同。
  2. 入口点通常是在 dll 中定义的方法。它对于 WIN32 或 dot-net 都是可选的。
  3. 点网代码最适合点网 dll。
  4. 如果 dot-net dll 没有入口点。assembly.EntryPoint返回空值。如果有,那么您可以调用invoke入口点并输入它。
  5. dot-net EXE 的行为也类似于 dot-net DLL(甚至可以重命名并使其看起来像一个)。EXE(即使重命名)肯定包含该入口点。
于 2013-06-19T07:27:03.847 回答