Какова цель lua "заглушки" dll для окон - PullRequest
2 голосов
/ 04 мая 2010

Я смотрю на включение Lua в проект C ++, и меня немного смущает присутствие двух двоичных файлов (lua51.dll и lua5.1.dll) в дистрибутиве Luabinaries .

Согласно документам ...

В Windows ваша библиотека или приложение должен быть связан с библиотекой заглушки. библиотека-заглушка - это библиотека с объявления функций, которые будут свяжите свою DLL с DLL Lua.

Почему? Я никогда не нуждался в заглушках DLL при связывании со сторонними DLL?

Ответы [ 2 ]

7 голосов
/ 04 мая 2010

Библиотека-заглушка - это файл .lib, а не DLL. Он содержит объявления функций для всех экспортируемых функций в DLL, которые просто перенаправляют вызов в саму DLL. Поэтому, если вы создаете приложение, которое хотите связать с lua51.dll, вы указываете компоновщику связать с lua51.lib, и все вызовы экспортируемых функций будут перенаправляться в DLL. Если вы этого не сделаете, вы получите много «неразрешенных внешних символов» ошибок при линковке.

Это необходимо только при статической привязке к DLL (чтобы она загружалась автоматически при запуске приложения). Не требуется при динамической загрузке DLL с помощью LoadLibrary.

Относительно того, почему у них есть две разные DLL, в руководстве сказано:

В пакетах DLL LuaBinaries есть dll-прокси под названием "lua51.dll". Он может быть использован для замены других "lua51.dll", выпущенных другими дистрибутивами. Он просто будет переадресовывать звонки на "lua5.1.dll". В пересылке нет скомпилированного исходного кода.

По сути, некоторые существующие приложения связываются с lua5.1.dll, в то время как другие связываются с lua51.dll, и они хотят поддерживать их обоих. В любом случае это не относится к библиотекам-заглушкам.

0 голосов
/ 04 мая 2010

Я считаю, что это связано с __declspec (импорт) и __declspec (экспорт) против GetProcAddress. Однако я точно не знаю.

...