如何在C#中检查DLL入口点是否存在而不调用函数
我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以从 Win32 P/Invoke LoadLibrary 和 GetProcAddress 调用:
使用 LoadLibrary 加载模块并获取句柄,使用 GetProcAddress 获取指向入口点的函数指针。如果后者返回错误,则入口点不存在。
You can P/Invoke the LoadLibrary and GetProcAddress calls from Win32:
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.