На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Можно ли в билдере в dll засунуть свой класс?
    Можно ли в билдере в dll засунуть свой класс?
      Можно что угодно и куда угодно....
      Поподробнее можно вопрос?
        Можно и поподробней. В работе с длл -- я полный ламер. Так что не серчай. Создал некоторый класс и хочу, чтоб этот класс (т.е. все его функции) можно было сохранить в длл, затем подключить длл к проекту, посоздавать экземпляров ну и тэдэ. Заранее Сенкс
          Можно и поподробней. В работе с длл -- я полный ламер. Так что не серчай. Создал некоторый класс и хочу, чтоб этот класс (т.е. все его функции) можно было сохранить в длл, затем подключить длл к проекту, посоздавать экземпляров ну и тэдэ. Если можно проще -- расскажи как проще (кроме непосредственного включения в проект). Заранее Сенкс
            Делаешь так:

            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)
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0218 ]   [ 16 queries used ]   [ Generated: 28.04.24, 08:41 GMT ]