加载C#dll并找到入口点

时间:2013-06-19 07:21:03

标签: c# dll loadlibrary

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

我使用以下代码加载库

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

1 个答案:

答案 0 :(得分: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. dot net code最适合dot-net dlls。
  4. 如果dot-net dll没有入口点。 assembly.EntryPoint返回null。如果有,那么你可以在入口点上调用invoke并输入。
  5. dot-net EXE也表现得像dot-net DLL(甚至可以重命名并使其看起来像一个)。 EXE(即使重命名)肯定包含该入口点。