c# - 从 C# 中列出非 .NET DLL 函数

标签 c# c++ winapi dll linker

我有一个 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 中所有函数的列表?

最佳答案

在 Remy Lebeau 的评论为我指明了正确的方向后,我查看了 PE 解析器并找到了 PeNet .它确实很好地完成了这项工作,并且除了导出的函数之外还揭示了大量信息。

它在 NuGet 上,因此您只需安装它,将 using PeNet 添加到文件顶部,然后使用如下代码:

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

关于c# - 从 C# 中列出非 .NET DLL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50705582/

相关文章:

c++ - 如果有多个以太网适配器,您个人如何通过 MAC 地址识别工作站?

c# - 是否可以拥有动态的动态部署项?

c# - 从 C# Web 表单应用程序启动 NodeJS 应用程序

c# - 如何使用 C# 或 VB.NET 获取当前本地主机名?

c++ - openssl RAND_add() 文档引用 RFC1750。 RFC1750 对此事保持沉默

c++ - 空投的运行时检查*

通过 Visual Studio 进行 C++ 调试 - vector 大小变化的观察点

c# - nTier + 运行时解析中的依赖注入(inject)

c# - 在 C# 中没有多个定义的设计

c++ - 鼠标指针渲染器