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

时间:2011-07-03 05:51:20

标签: c# pinvoke

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

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

1 个答案:

答案 0 :(得分:10)

您可以从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获取指向入口点的函数指针。如果后者返回错误,则入口点不存在。