Каковы некоторые из возможных причин ошибки времени выполнения “точка входа не найдена”?
-
19-09-2019 - |
Вопрос
Я пытаюсь скомпилировать программу, созданную из Visual Studio 8, преобразовав ее в Visual Studio 9.Указав все необходимые .Каталоги DLL, .lib и #include, я успешно скомпилировал программу.Однако, когда я пытался запустить его, он всегда выдавал ошибку:
Не удалось найти SwapBuffers точки входа процедуры в библиотеке динамических ссылок OpenGL32.DLL.
Я проверил свои справочники.OpenGL32.DLL действительно существует!Я даже скачиваю OpenGL32.dll опять же, на всякий случай, у меня старая версия;нет, это не работает.Я даже попытался поместить OpenGL32.dll прямо рядом со встроенным .exe.Нет, он по-прежнему выдает ту же ошибку.
Вы, кажется, знаете, каковы некоторые из возможных причин здесь?
Решение
Выглядит как SwapBuffers
функций там просто нет.Получаете ли вы предупреждение во время компиляции о неопределенных ссылках или подобном?
Попробуйте изучить dll с помощью соответствующего инструмента для просмотра таблиц экспорта и найдите function - se, если она там есть (Google дал мне это: Средство просмотра экспорта DLL)
Вы также могли бы попробовать загрузить его динамически следующим образом:
HMODULE lib = LoadLibraryA("OpenGL32.DLL");
FARPROC WINAPI proc = GetProcAddress(lib, "SwapBuffers");
if (!proc)
printf("SwapBuffers() not found\n");
Будьте осторожны с вызовом указателя на функцию proc
напрямую, не зная соглашения о вызовах, используемого в dll (возможно, stdcall), иначе ваш стек может быть неправильно выровнен.