Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Работа с DLL, способы вызова функций

#c #dll


У меня очень "новичковый" вопрос (никогда в жизни не работал с DLL) и состоит он
в следующем:
У меня есть 3 файла f1.c f2.c f3.c. В каждом из них вот по таким функциям:
// f1.c
int f1()
{
    return 2;
}

// f2.c
int f2()
{
    return 4;
}

// f3.c
int f3()
{
    return 10;
}

потом я получил три отдельных объектных файла, с помощью команды (использую mingw
по windows):
gcc -c f1.c f2.c f3.c

и далее я создаю DDL-ку, командой:
gcc f1.o f2.o f3.o -o test1.dll -shared

получился файл test1.dll
С помощью DLL Export Viewer я открыл и посмотрел свой DLL файл:

Как я теперь могу динамически или статически (вот это я еще плохо понял) обращаться
к этой библиотеки, для вызова функций f1(), f2() ( а если бы в функции были бы параметры
входные? ) например из своего C++ приложения? Что я вообще могу делать с этим файлом?
Извиняюсь за немного глупый вопрос    


Ответы

Ответ 1



Случайно удалил свой ответ, что смог восстановил. Давно уже не работал, там все очень просто, разбираться не сложно, примерно так: если динамически, загружаете dll, получаете ссылку на функцию по имени (напр. "f1"), используете функцию по ссылке; если статически, подключаете библиотеку к проекту, объявляете внешнюю функцию и сразу можно вызывать в программе. В обоих случаях надо знать прототип функции. Более подробно см.: http://www.firststeps.ru/mfc/winapi/r.php?22 http://www.firststeps.ru/mfc/winapi/r.php?41 Надо еще разобраться с методами вызова функций: http://ru.wikipedia.org/wiki/Соглашение_вызова

Ответ 2



Все сводится к вызовам LoadLibrary, FreeLibrary и GetProcAddress. Посмотрите здесь на пример: использование dll.

Комментариев нет:

Отправить комментарий