Конференция "Основная" » Подмена Application динамической библиотеки
 
  • МистерТ (11.07.08 09:50) [0]
    Здравствуйте!
    Есть ситуация, приложение и библиотека (.dll), оба созданы в делфи и оба содержат формы. Использоваться будут только в рамках друг друга, перевод на другие языки не требуется.
    Как известно экземпляры Application у них разные, в результате окно создаваемое в библиотеке не наследует иконку приложения и вообще, отображается отдельно на панели задач, а хотелось бы и иконку и "стандартное" для форм поведение, т.е. что бы на панели отображалась только главная форма (WinAPI привлекать не хотелось бы, только стандартными средствами VCL).
    Для этого при инициализации приложения передаю в библиотеку указатель на Application приложения, а вот дальше такая петрушка:
    Вариант 1:
    LibForm := TLibForm.Create(MainApp);


    MainApp - Application приложения.
    Ситуация не меняется. Окно без нужной иконки и появляется на панели задач.
    Вариант 2:
    // при инициализации
    LibApp := Application; //
    Application := MainApp; //
    ...
    LibForm := TLibForm.Create(Application); //
    LibForm.ShowModal;
    FreeAndNil(LibForm);
    Application := LibApp;


    Окно с нужной иконкой, на панели задач не появляется, но приложение падает при выгрузке библиотеки.
    Вариант 3:
    // при инициализации
    pLibApp := @Application; //
    Application := pMainApp^; //
    ...
    LibForm := TLibForm.Create(Application); //
    LibForm.ShowModal;
    FreeAndNil(LibForm);
    Application := pLibApp^;


    Окно с нужной иконкой, на панели задач не появляется, не падает, но при выгрузке библиотеки главная форма изчезает, процесс "висит" в диспетчере задач.

    Господа, как правильно создать форму из библиотеки (.dll) "привязанной" к Application приложения ?

    Заранее благодарю всех за ответы.

    З.Ы. .bpl не предлагать.
  • МистерТ (11.07.08 09:52) [1]
    Что вариант 3 - дурость, знаю.
    Но блин запутался в конец уже...
  • Сергей М. © (11.07.08 10:12) [2]

    > запутался в конец уже


    А проблема-то надуман - просто возьми да собери оба проекта с опцией использования рантайм-пакетов, тогда и никаких прыжков с бубном вокруг общности  Application, Screen и прочих глоб.переменных уровня VCL yt gjnht,etncz)
  • Плохиш © (11.07.08 10:17) [3]

    > МистерТ   (11.07.08 09:50)  

    http://www.ehow.com/how_2109379_use-forms-dll.html
  • МистерТ (11.07.08 10:58) [4]
    > Плохиш ©   (11.07.08 10:17) [3]
    С хендлом делал, в результате иконка все равно дефолтовая. Поэтому и пытался "подменить" объекты Application.
  • tesseract © (11.07.08 15:04) [5]

    > Как известно экземпляры Application у них разные,


    У них всё разное, Delphi отлично поддерживает COM - почему бы его не использовать, а не городить ерунды?
  • sniknik © (11.07.08 16:21) [6]
    > Использоваться будут только в рамках друг друга
    убери dll, она не нужна, никаких выгод только проблемы.
 
Конференция "Основная" » Подмена Application динамической библиотеки
Есть новые Нет новых   [134491   +13][b:0][p:0.001]