![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Fanat |
![]()
Сообщение
#1
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Хочу создать файл Dll. Делаю так File->New->Other->Dll wizard
Там забиваю:
Помимо этого там ещё есть функция аналог main. Как правильно сохранить? Я жму сохранить и сам подписываю после точки расширение .dll... После чего открыть этот файл заново не получаеться. Нам ещё сказали на занятиях что автоматически должен создаться файл .lib? И зачем он мне ещё предлогает сохранить проект какойто который я не создавал?... |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Что я только что сделал:
Открыл Билдер, File -> New -> Other -> Dynamic Link Library... В диалоговом окне отключил все примочки VCL и Multi-Threading-а, сделал язык не С++, а С. Открывается редактор: #include <windows.h> Добавляю, собственно, твою функцию... Получаю такой файл: #include <windows.h> Сохраняю этот проект, причем файл сохраняется с расширением *.С... Билдим проект - получаем DLL вместо EXE... Сообщение отредактировано: volvo - 19.10.2007 18:59 |
Fanat |
![]()
Сообщение
#3
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Сделал так. Получил .dll.
Теперь в другом проекте.
Что то не так. Файл Project2.dll лежит в тойже папке что и файлы этого проекта. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
DLL:
Проект: Все работает... |
Fanat |
![]()
Сообщение
#5
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Спсибо разобрался...
![]() |
Fanat |
![]()
Сообщение
#6
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
А если необходимо создать .dll в котором описаны методы класса...это как сделать?...
Надо ли изменять или создавать файл .h или что то похожее?.. |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Ничего не надо ни изменять ни создавать заново. Один и тот же H-файл может использоваться и для DLL, и для использующей ее программы. Только в DLL класс должен описываться как
class __declspec (dllexport) MyClass { а в программе - как class __declspec (dllimport) MyClass {(элементарно делается с использованием #ifdef) |
Fanat |
![]()
Сообщение
#8
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Пишу в файле который хочу чтобы был .dll с описанием методов класса.
Тогда в A.h (тот который должен относиться к .dll) что должно быть?
Сообщение отредактировано: Fanat - 21.10.2007 15:09 |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Используя LoadLibrary ты замучаешься работать с классом из DLL. Вот тут лежит пример, посмотри:
http://www.codeproject.com/dll/classesexportedusingLL.asp Гораздо проще работать с LIB-файлом. Для этого случая: Подключаемый к DLL-проекту header: class __declspec(dllexport) MyClass { В подключаемом к основному проекту заменить dllexport на dllimport Собственно, код библиотеки: #include <windows.h> Использование (подключаем H-файл с описанием класса и LIB-файл через "Project -> AddToProject -> имя_файла.LIB"): void __fastcall TForm1::Button1Click(TObject *Sender) Сообщение отредактировано: volvo - 21.10.2007 15:57 |
Fanat |
![]()
Сообщение
#10
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Сделал как ты написал. Спасибо работает. Но является ли это динамической загрузкой.
Исходя из примера пишу HMODULE hMod = LoadLibrary ("ProjectDll.dll") выдаёт ошибку. Как её загрузить? Пишу так:
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Вообще-то с LoadLibrary проблем быть не должно. У меня по крайней мере оно работает... А вот getConsumer - нулевой...
А это: ... работать не будет, потому как тело конструктора описано тоже в библиотеке, и надо брать адрес конструктора (и вызывать его по адресу), чтобы инициализировать объект. |
Fanat |
![]()
Сообщение
#12
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Вот тут есть довольно подробное объяснение процесса (и альтернативы тоже)...
|
Fanat |
![]()
Сообщение
#14
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Во...спасибо...3ий вариант ето то что нужно...а с помощью чего можно открыть файл который разопхивируеться?.. Я так понимаю там пример...он бы мне сильно помог...=) |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
![]() |
Fanat |
![]()
Сообщение
#16
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
А что там внутри у тебя не открывается? BPR - файлы проекта, открывай их и компилируй DLL-ку и саму программу...
|
Fanat |
![]()
Сообщение
#18
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
|
Fanat |
![]()
Сообщение
#19
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Всё!!!
![]() откуда вообще в процессе работы программы берёться то что необходимо обратиться к файлу КлассНаследник.cpp ведь ни один файл его не включает в себя?.. |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Цитата ни один файл его не включает в себя? FormTestDLL.H: typedef IMyCls * (__declspec(dllimport) FCreate(int Size)); |
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 2:25 |