Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MDIChild и DLL, Помогите найти решение 
:(
    Опции темы
Serggggg
  Дата 12.12.2003, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.12.2003
Где: Донецк, Украина

Репутация: нет
Всего: нет



В очередной раз прошу совета.
Проблема такова - Главная рабочая форма проги - MDIForm, а в подключаемой библиотеке (dll) должна находиться форма MDIChild.
Библиотека должна подключаться ДИНАМИЧЕСКИ (через THandle, LoadLibrary и т.д.). В dll есть соответствующая процедура, создающая эту форму (по крайней мере, она пытается это сделать).
Возможно ли такое? И если возможно, то как это реализовать? Ибо Delphi жутко ругается при попытке показать дочернее окно посредством ShowModal.
Спасибо за внимание.
--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
Unregistered
Дата 15.12.2003, 03:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не понятно, причем ShowModal и дочернее окно. А для того чтобы создать дочернее окно из dll, нужно передать в библиотеку указатель на TApplication твоего MDI-приложения. И создавать примерно так:

function CreateMDIForm: integer; stdcall;
begin
Result := integer(TfrmChild.Create(Application));//Application ТВОЕГО приложения
end;

и еще. перед выгрузкой библиотеки, ей нужно вернуть старое значение Application.
  Вверх
Killer
Дата 21.4.2004, 09:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Хочу поправить что данная прооцедура не срабатывает при создании MDIChild формы,вызываемой из dll. Как тока не пыталься все равно не получаеться создать.
Если кто то делал не могли бы вы поподробнее рассказть что нужно MDIChild форме что бы она намана встала в основное приложение, а вчастносте в форму типа MDIForm.

Заранее спасибо
  Вверх
Guest
Дата 21.4.2004, 13:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да, кстати, весьма интересная проблема. В свое время я тоже провел некоторое время пытаясь её решить, но так и не решил. Если кто знает, НЕ МОЛЧИТЕ, plz.
  Вверх
Killer
Дата 21.4.2004, 13:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











adv/abuse.gif Не ну как то же можно подцепить форму из DLL в основное приложение при этом соблюдать строение MDI ? Не проходите мимо я хочу знать как ??? hehe.gif
  Вверх
Guest
Дата 21.4.2004, 13:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да конечно можно! Но как? Может стоит обратиться к API функциям? Ведь есть же подобные программы. Наверное буржуи из Borland зажали это возможность в Delphi. Или может я зря их ругаю? bored.gif
  Вверх
Killer
Дата 21.4.2004, 13:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я вот чета не понял у сержа получилось или не получилось создать, правда это давно было может его уже и нет (шутка), но все же ??? что есть большая разница между динамическим и статическим вызовом библиотеки и последующим вызовом процедуры по динамическому созданию формы ???, можь я дурак и мне тока на VB писать остаеться biggrin.gif
  Вверх
HiTek
Дата 21.4.2004, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.4.2004

Репутация: нет
Всего: нет



Между динамическим и статическим вызовом библиотек разницы почти нету, кроме эстетической ))
При статической компоновке библиотека всегда должна поставляться вместе с программой. При это создается специальный код пролога/эпилога в программе для облегчения доступа к функциям библиотеки.
При динамической компоновке ты сам грузишьбиблиотеку в памятьЮ сам её освобождаешь, сам добываешь точки входа в процедуры, сам следишь за соответствием типов параметров.

Это сообщение отредактировал(а) HiTek - 21.4.2004, 14:04
PM MAIL   Вверх
Killer
Дата 21.4.2004, 14:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Понятно, Спасибо конечно но такую лекцию читать смылса не было я и так это знаю, я просто спросил от метода вызова это может зависить??, канечно понимаю что это глупый вопрос, но кто его знает???
  Вверх
HiTek
Дата 21.4.2004, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.4.2004

Репутация: нет
Всего: нет



Не думаю, что это может повлиять на решение сей проблемы. Т.к. в итоге все грузится оинаково. Просто при динамической компоновке компилер облегчает жизнь программеру немного.
ИМХО Исток проблемы надо искать в самом Delphi, либо в кривых руках.
PM MAIL   Вверх
Гость_Silence
Дата 21.4.2004, 14:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Тута глядя на вас я решил создать подобную ситуацию. Создал приложение с главной формой типа MDIForm и создал dll туда добавил форму типа MDIChild, потом попытался из приложения вызвать функцию каторая создает форму MDIChild и...................................................................................... в натуре не работает!!!!, причем ошибка скорее всего исходит от того что MDIChild форма не может найти в классе Screen окно типа MDIForm. вота может в этом загвоздка, (так сказать собака зарыта)???????????
  Вверх
HiTek
Дата 21.4.2004, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.4.2004

Репутация: нет
Всего: нет



Уважаемый, Гость_Silence, не могли бы вы поподробнее рассказать о своем тесте (код, частями, показать).
PM MAIL   Вверх
Guest
Дата 21.4.2004, 14:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Это основное приложение
Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
procedure Open(Handle: HWND; sc: PChar); stdcall; external 'DllForm';
var
 Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
Open(Application.Handle,@Screen);

end;


end.

это dll

  Вверх
Гость_Silence
Дата 21.4.2004, 15:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











это dll
Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm12 = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
 end;

procedure Open(Handle: HWND; sc: PChar); export;
var
 Form12: TForm12;

implementation

{$R *.dfm}
procedure Open;
begin
Screen.Free;
Screen := TScreen(sc);

Form12 := TForm12.CreateParented(Handle);
Form12.Show;
end;
end.

  Вверх
Гость_Silence
Дата 21.4.2004, 15:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











зачем частями вот лови почти весь код тока она все равно не фурыкает.
Dll - женщины они все такие, когда тебе надо что то от нее она задом поварачиваеться.. smile.gif
  Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.