Динамическая библиотека Linking при исполнении - PullRequest
2 голосов
/ 27 мая 2010

почему не удалось загрузить библиотеку по ссылке во время компиляции? меня не волнует освобождение библиотеки, но она просто не будет работать.

#include <windows.h>

    int main()
    {
        LoadLibrary("winmm.lib");
        timeGetTime();
    }

Ответы [ 4 ]

3 голосов
/ 27 мая 2010

Попробуйте этот код. Это должно решить вашу проблему.

#include <windows.h>

#pragma comment(lib, "winmm.lib")

int main()
{
    DWORD time = timeGetTime();
}
3 голосов
/ 27 мая 2010

.lib не является динамически связанной библиотекой (DLL) и не может быть загружен во время выполнения. Вам нужно загрузить .dll или связать .lib во время соединения (в этот момент вы не используете LoadLibrary).

2 голосов
/ 27 мая 2010

Из вашего комментария выше ясно, что проблема в том, что timeGetTime () запрашивает модуль winmm во время компиляции, а это значит, что вам нужно связать с winmm.lib. Вы не можете вызывать функцию напрямую по ее имени, если хотите использовать связывание во время выполнения; Вы должны получить указатель на его функцию из DLL.

Если вы действительно хотите загрузить DLL во время выполнения, вы должны использовать GetProcAddress . Полный набор примеров кода для правильного использования LoadLibrary находится на этой странице MSDN .

1 голос
/ 27 мая 2010

Вы пытаетесь загрузить файл .lib (информация о библиотеке линкера) с помощью функции LoadLibrary, которая предназначена для загрузки библиотек динамической компоновки - это совершенно неправильно. Файлы .lib связываются в исполняемом файле во время компоновки, тогда как файлы .dll загружаются во время выполнения, либо посредством явной загрузки с использованием LoadLibrary, либо путем подачи компоновщику файла .lib, который ссылается на файл .dll.

  • Если вы хотите загрузить статическую библиотеку, вы должны указать компоновщику включить ее - обратитесь к документации вашего компилятора об этом.
  • Чтобы загрузить динамическую библиотеку с использованием файла .lib, вам нужно сделать то же самое, что и для статической библиотеки, и поместить динамическую библиотеку в глобальный PATH или в тот же каталог, что и исполняемый файл.
  • Чтобы загрузить динамическую библиотеку во время выполнения, вам нужно вызвать LoadLibrary, чтобы получить ее дескриптор, и передать ее в GetProcAddress, чтобы получить указатели на интересующие вас функции. В Википедии есть небольшой пример того, как это сделать. .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...