【问题标题】:List non-.NET DLL functions from C#列出来自 C# 的非 .NET DLL 函数
【发布时间】:2018-11-15 06:21:16
【问题描述】:

我有一个 C++ DLL,我使用 DllImported LoadLibrary 将其导入到 C# 项目中。

class Program
{
    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern IntPtr LoadLibrary(string dllToLoad);

    static void Main(string[] args)
    {
        IntPtr library = LoadLibrary(@"MyDll.dll");
        if (library == IntPtr.Zero)
        {
            var err = Marshal.GetLastWin32Error();
            throw new Exception($"Library load error, code {err}");
        }
    }
}

我现在想枚举从此 DLL 导出的函数。我见过this question,但它适用于 C++,我不确定如何在 C# 中做同样的事情。

解析dumpbin /exports 的输出可能会奏效,但我想先知道是否有更具体的方法。

如何从 C# 中获取 C++ DLL 中所有函数的列表?

【问题讨论】:

  • 如果你不想shell out到外部进程并解析它的输出,那么手动解析DLL的PE头来直接枚举它的EXPORTS表是唯一的方法。如果您不想自己完成这项工作,请尝试寻找可以为您完成这项工作的 3rd 方库。

标签: c# c++ winapi dll linker


【解决方案1】:

在 Remy Lebeau 的评论为我指明了正确的方向后,我查看了 PE 解析器并找到了 PeNet。它做得非常好,并且除了导出的函数之外还显示了大量信息。

它在 NuGet 上,所以你可以安装它,将using PeNet 添加到文件顶部,然后使用如下代码:

var pe = new PeFile(@"MyDll.dll");
var functions = pe.ExportedFunctions.Select(x => x.Name).ToList();

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-08
      • 2011-08-25
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多