![]() |
|
Модераторы: bsa |
![]()
|
|
| FortMax |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 2.10.2006 Где: Россия, г. Бироби джан ЕАО Репутация: нет Всего: 5 |
Доброго времени суток =)
Кто-нибудь(т.е. не яндек, не гугл) может на пальцах (на простом примере) обьяснить как создавать и работать с dll ??? -------------------- ![]() |
|||
|
||||
| t_gran |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 13.11.2007 Где: г.Усть-Илимск Репутация: нет Всего: 37 |
Я так понимаю вам нужно на самом простом примере. Если я вас правильно понял, то давайте разбирём наипростейшый пример. Компилятор GCC, платформа Windows. DLL будет содиржать всего 2 простейшие ф-ии, а-ля паскаль, inc и dec (что соответственно инкремент и декремент целого числа).
library.h
Как видно из примера, ничего нового, кроме __declspec(dllexport) - так мы указываем компилятору, что эти данные необходимо поместить в секцию экспорта. Компилируем:
где: -s - удалить отладочную информацию, -O2 - оптимизация 2-го уровня, -- shared - компилировать динамическую библиотеку. В результате получаем библиотеку library.dll Теперь пишем тестовую программу test.c
Т.к. пишем под винду, то соответственно используем API-функции. В нашем случае это: 1. LoadLibrary - загрузить. 2. GetProcAddress - получить адрес конструкции. 3. FreeLibrary - закрыть (освободить) библиотеку. Компилируем обычно:
P.S.: Как-то так. P.P.S: Это самый примитивнейший пример, и не является панацеей. Отличная статья Это сообщение отредактировал(а) t_gran - 9.10.2009, 08:32 -------------------- Я знаю, что ничего не знаю© Сократ ![]() |
||||||||
|
|||||||||
| Gugle |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 9.12.2005 Репутация: нет Всего: нет |
Доброго времени суток!
Поднимаю этот вопрос, т.к. схожа. Взял ваш код за исходный для создания dll на Си. Все собралось, dll получилась. Проверку на Си проходит, т.е. все возвращает прально, но при попытке использовать dll с другими языками, например с delphi, вываливается с ошибкой:
Подскажите почему? Может для этого входные переменные в dll надо как то по другому объявлять? |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
У Delphi и C разные соглашения о передаче параметров: в Delphi (pascal'e) параметры памещаются в стек начиная с первого, а из стека их освобождает вызывающая программа,
в C параметры памещаются в стек начиная с последнего, а освобождает их вызывающая программа, что позволяет писать функции типа printf(fmt, ...); Нужно либо в dll объявить, что функция будет вызываться из паскаля
либо в Delphi объявить, что функция написана на C |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |