“入口点未找到”运行时错误的可能原因有哪些?

时间:2010-02-08 10:22:25

标签: dll runtime-error

我正在尝试编译从Visual Studio 8创建的程序,将其转换为Visual Studio 9.在提供了所有必需的.DLL,.lib和#include目录之后,我成功编译了该程序。但是,当我尝试启动它时,它总是会发出错误:

无法在动态链接库OpenGL32.DLL中找到过程入口点SwapBuffers。

我检查了我的目录。 OpenGL32.DLL确实存在!我甚至再次下载OpenGL32.dll,以防我的旧版本;不,它不起作用。我甚至尝试将OpenGL32.dll放在内置的.exe旁边。不,它仍然会发出同样的错误。

你似乎知道这里有什么可能的原因吗?

1 个答案:

答案 0 :(得分:1)

看起来SwapBuffers函数根本就不存在。您是否在编译时收到有关未定义引用的警告?

尝试使用适当的工具探索dll以查看导出表并查找函数 - 如果它在那里(谷歌给了我这个:DLL Export Viewer

您也可以尝试动态加载它:

HMODULE lib = LoadLibraryA("OpenGL32.DLL");
FARPROC WINAPI proc = GetProcAddress(lib, "SwapBuffers");

if (!proc)
   printf("SwapBuffers() not found\n");

小心地直接调用函数指针proc,而不知道dll中使用的调用约定(可能是stdcall),否则你的堆栈可能会被填写。