Я динамически связал libhunspell.dll (HunSpell) с моим приложением. Это работает, но есть глупая проблема, которую я не знаю, почему это происходит.
Даже прежде чем я использую LoadLibrary("path\\to\\libhunspell.dll");
, чтобы загрузить и использовать его, при запуске приложения оно пытается загрузить библиотеку самостоятельно. Если я помещаю libhunspell.dll в путь, где находится мой главный исполняемый файл, он может загрузить его, в противном случае он сообщает об ошибке сразу после запуска приложения - Это приложение не удалось запустить из-за LIBHUNSPELL .DLL не был найден. Повторная установка приложения может решить эту проблему. , и приложение не запускается.
Я бы понял, если бы LoadLibrary
использовал неверный путь, но это происходит, как только исполняется исполняемый файл, даже до выполнения первого оператора в WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
(я пытался установить точку останова, и она даже не дойти до него, так бывает раньше).
Таким образом, в результате я должен поместить libhunspell.dll в ту же папку, где находится исполняемый файл приложения, а не в путь, который я хочу.
Вероятно, это легко исправить, хотя я не знаю, что искать.
Итак, вопрос в том, как мне избежать его немедленной загрузки и подождать, пока я использую LoadLibrary
вызов?
Вот как я связался, если это может помочь:
1) скомпилированный libhunspell.dll в Visual Studio 2015 (я использовал опцию / MT, чтобы статически связать его, чтобы у него не было распространяемого VC ++ в качестве зависимости).
2) создал библиотеку импорта (libhunspell.lib), используя implib.exe -a -c -f libhunspell.lib libhunspell.dll
3) связал это с исходным модулем .cpp, который использует его, используя #pragma comment(lib, "libhunspell.lib")
(это RAD Studio 2010, поэтому .lib требуется в отличие от более новых версий).
4) позже в том же .cpp использовал LoadLibrary
для загрузки этой библиотеки и использовал ее.