Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.14.126.74] |
|
Сообщ.
#1
,
|
|
|
Можно ли в билдере в dll засунуть свой класс?
|
Сообщ.
#2
,
|
|
|
Можно что угодно и куда угодно....
Поподробнее можно вопрос? |
Сообщ.
#3
,
|
|
|
Можно и поподробней. В работе с длл -- я полный ламер. Так что не серчай. Создал некоторый класс и хочу, чтоб этот класс (т.е. все его функции) можно было сохранить в длл, затем подключить длл к проекту, посоздавать экземпляров ну и тэдэ. Заранее Сенкс
|
Сообщ.
#4
,
|
|
|
Можно и поподробней. В работе с длл -- я полный ламер. Так что не серчай. Создал некоторый класс и хочу, чтоб этот класс (т.е. все его функции) можно было сохранить в длл, затем подключить длл к проекту, посоздавать экземпляров ну и тэдэ. Если можно проще -- расскажи как проще (кроме непосредственного включения в проект). Заранее Сенкс
|
Сообщ.
#5
,
|
|
|
Делаешь так:
SomeClass.h #ifdef BUILD_DLL #define _DLL_ENTRY extern __declspec(dllexport) #else #define _DLL_ENTRY extern __declspec(dllimport) #endif class _DLL_ENTRY TSomeClass{ .... }; SomeClass.cpp (в dll) #define BUILD_DLL //или можно в опциях conditional defines #include <SomeClass.h> .... для exe: #include <SomeClass.h> .... К exe-проекту добавь lib'ку которая генерится при сборке dll - это позволит линкеру правильно сформировать секцию импорта.(иначе будет unresolved external). Куда генерить lib'ы указываешь в Tools->Environment Options->Library->bpi/lib output dir или в опциях самого проекта но учти: если будешь исп. VCL то чтобы экзепшены из dll/bpl корректно ловились необходимо к обеим проектам подцепить lib'у для VCL-совместимой RTL:cp32mt.lib (статическая RTL) или cp32mti.lib (динамическая RTL) вместо cw32mt(i).lib. Делай это непосредственно в bpr-файлах во внешнем редакторе.Для этого клозаешь всю проектную группу и пишешь так: <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib"/> Потом заново открываешь и компилишь. Так вот теперь главный сюрприз! dll и VCL совместимая RTL не совместимы Скомпилить exe не получится будут два unresolved external: SysInit::VclInit и SysInit::VclExit Так что единственный выход исп. пакеджи (bpl) там все будет корректно. Только класс объявляется так: class PACKAGE TSomeClass{ ... } И не надо никаких #defin'ов билдер сам определит где экспорт а где импорт - все будет корректно работать. Так что если ты библиотеку будешь исп. только для VCL-проектов лучше делай bpl - никаких глюков не будет 8) |