Конференция "Основная" » как работать с фремом, созданным в dll
 
  • _Z_ (16.04.08 22:37) [0]
    Делаю плагин, который создает фрейм. Вопрос - как правильно передать ссылку на созданный фрейм в основное приложение? Если передаю в плагин ссылку родительского компонента (TGroupbox), то при попытке PluginFrame.Parent:=parentGroupBox получаю ошибку EConvertError "cannot assign a font to a font". Если передаю handle групбокса, то при вызоде из функции access violation.
  • Сергей М, (16.04.08 22:47) [1]
    Ты про bpl что-нибудь слышал ?
  • Reindeer Moss Eater © (16.04.08 23:01) [2]
    Если ссылка на фрейм в главном приложении нужня для того, чтобы работать с ней как с классом фрейма, то вопрос:

    нафига совать фрейм в dll, если хост приложение при этом тоже должно содержать в себе модуль фрейма?
  • Reindeer Moss Eater © (16.04.08 23:10) [3]
    Это даже если не принимать во внимание такую мелочь как разные копии VCL там и тут.
  • han_malign © (17.04.08 09:17) [4]
    1. bpl
    2.  и плагин и приложение должны быть скомпилированны с использованием Runtime packages

    З.Ы. BPL - это та же DLL только с экспортом всех доступных функций из модулей указанный в contains в .dpk

    По сути тебе надо dpr переименовать в dpk, прописать пакеты в requires, uses в dpk заменить на contains, а library на package...
    И подгружать не через LoadLibrary а LoadPackage...

    З.З.Ы. Единственное неудобство - в двух plugin-ах не должно быть модулей с одинаковыми именами, иначе второй обломается. Если нужен какой то свой базовый модуль общий для разных plugin-ов - надо выносить в отдельную, общий для приложения и plugin-ов, BPL(скажем app_core.bpl)...

    application.dpr(exe):
    Build with runtime packages: app_core
    (dcc32 application.dpr -LUapp_core)

    pliginX.dpk
    requires
       app_core;

                     app_core.dpk(bpl):
                     requires
                     rtl,
                     vcl,
                     vclx,
                     ...

  • han_malign © (17.04.08 09:26) [5]
    ну и соотвественно
    app_core.bpl
    designide70.bpl
    rtl70.bpl
    rxctl7.bpl
    vcl70.bpl
    vclactnband70.bpl
    vcldb70.bpl
    vcljpg70.bpl
    vclsmp70.bpl
    vclx70.bpl
    и какие там еще понадобятся(70-зависит от версии Delphi на которой компилируется) - придется таскать вместе с EXE-шником.
  • _Z_ (17.04.08 10:47) [6]
    Я правильно понимаю, что в этом случае плагин ввиде dll сделать нельзя? Только ввиде bpl?
  • _Z_ (17.04.08 10:52) [7]
    Просто идя была такая - плагин создает свой фрейм (где какие то настройки), приложение вызывает ShowPluginFrame(MainFrom), а уже сам плагин выводит на родительский компонент свой фрейм.
  • Сергей М. © (17.04.08 11:06) [8]

    > _Z_   (17.04.08 10:47) [6]


    Нет, неправильно.

    Можно и в виде dll, но она все равно должна быть как минимум собрана с ран-тайм пакетами, точно так же как и хост-приложение.

    А раз так, то теряется всякий смысл в такой реализации - на фоне этого требования bpl дает кучу преимуществ и удобств, не говоря уже о простоте и изящности способов использования реализованных в ней объектов.
  • Виктор (17.04.08 14:49) [9]
    А какой резон использовать именно фрейм? Фрейм, впринципе, то же окно (форма), только с дополнительными приблудами. Почему бы не выводить на родительский компонент именно форму с borderStyle = bsNone?
  • _Z_ (17.04.08 17:09) [10]

    > А какой резон использовать именно фрейм? Фрейм, впринципе,
    >  то же окно (форма), только с дополнительными приблудами.
    >  Почему бы не выводить на родительский компонент именно
    > форму с borderStyle = bsNone?


    А форму можно так использовать (как я хочу)?
 
Конференция "Основная" » как работать с фремом, созданным в dll
Есть новые Нет новых   [134487   +1][b:0][p:0.001]