如何在C#中检查DLL入口点是否存在而不调用函数

发布于 2024-11-18 00:23:49 字数 206 浏览 1 评论 0原文

我正在使用 OpenTK OpenGL 包装器。由于它加载 OpenGL dll(或 Linux 上的 .so),因此它包含许多 DLL 导入函数。

问题是,某些驱动程序不会导出所有功能。有没有办法检查入口点是否存在?我需要这样做,因为如果不按正确的顺序执行,在拥有该函数的系统上实际调用该函数将导致崩溃。因此,捕获 EntryPointNotFound 异常在我的情况下不起作用。

I'm using OpenTK OpenGL wrapper. Since it loads OpenGL dll (or .so on Linux) it contains a lot of DLL imported functions.

The trouble is, some drivers don't export all of the functions. Is there a way to check if the entry point exists? I need to do this since actually calling the function on systems that have it will cause a crash if not done in the proper sequence. So catching EntryPointNotFound exception doesn't work in my case.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

轮廓§ 2024-11-25 00:23:49

您可以从 Win32 P/Invoke LoadLibrary 和 GetProcAddress 调用:

[DllImport("kernel32", SetLastError=true)]
static extern IntPtr LoadLibrary(string lpFileName);

[DllImport("kernel32", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=true)]
static extern UIntPtr GetProcAddress(IntPtr hModule, string procName);

使用 LoadLibrary 加载模块并获取句柄,使用 GetProcAddress 获取指向入口点的函数指针。如果后者返回错误,则入口点不存在。

You can P/Invoke the LoadLibrary and GetProcAddress calls from Win32:

[DllImport("kernel32", SetLastError=true)]
static extern IntPtr LoadLibrary(string lpFileName);

[DllImport("kernel32", CharSet=CharSet.Ansi, ExactSpelling=true, SetLastError=true)]
static extern UIntPtr GetProcAddress(IntPtr hModule, string procName);

Use LoadLibrary to load the module and get the handle, and GetProcAddress to get a function pointer to the entry point. If the latter returns an error, the entry point doesn't exist.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文