列出 C# 中的 non-.NET DLL 函数
List non-.NET DLL functions from C#
我有一个C++DLL,我正在使用DllImport
edLoadLibrary
将其导入到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 导出的函数。我已经看到了这个问题,但它适用于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();
这里有一篇关于如何从文件中读取 PE 标头的好文章: https://blogs.msdn.microsoft.com/kstanton/2004/03/31/exploring-pe-file-headers-using-managed-code/
您需要检查 .edata 部分以查找导出: https://msdn.microsoft.com/en-us/library/windows/desktop/ms680547(v=vs.85(.aspx#the_.edata_section__image_only_
相关文章:
- Visual c ++,使用字符串引用/指针调用 dll 函数
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 调用 "project" 函数和调用 DLL 函数之间的区别
- 代码在 msvcrt .dll函数上设置断点失败
- VB.NET DLL中的C++DLL函数复制
- 在python-ctypes中声明变量并传递给dll函数
- 从 Python 调用 Windows DLL 函数时出错
- 调用 dll 函数时"Run-Time Check Failure #0 - The value of ESP"
- 列出 C# 中的 non-.NET DLL 函数
- 基本 DLL 函数
- 如何在不可修改的源代码中使用 DLL 函数?
- 对需要双精度数组和结构作为输入C++ DLL 函数的 C# 调用
- WScript.CreateObject 在调用 C++ COM dll 函数时返回空
- 如何在 lua cpp 模块中调用托管 c++ dll 函数
- 测试C++ DLL 函数
- 从 C# GUI 将 char * 参数传递给C++ dll 函数
- 使用指针调用C++ DLL 函数
- 在C++中导入 DLL 函数
- #VALUE!在 64 位 Excel 中调用 DLL 函数 (C++) 时
- 如何从 UWP 应用调用"libheif.dll"函数