Форум: "WinAPI";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Внизmdi форма Найти похожие ветки
← →
mutabor (2005-01-17 15:09) [0]как и где корректно закрыть mdichild форму, вызываемую из dll?
dll выглядит сл образом:
....
var
DllApp:TApplication;
........
function ShowChild(AMainApp:TApplication):longint;stdcall;
var
Form:TDllChild;
begin
if Application<>AMainApp then
begin
DllApp :=Application;
Application := AMainApp;
end;
Form := TDllChild.Create(Application);
Form.Show;
Form.Edit1.Text := IntTOStr(Application.MainForm.MDIChildCount);
Res :=LongInt(Form);
Result := LongInt(Form);
end;
....
вызываеться так
procedure TForm1.Action1Execute(Sender: TObject);
type
TProc = function(AMainApp:TApplication):longint;stdcall;
var
Proc:Tproc;
CloseProc:TCloseProc;
RetVal:integer;
begin
try
if hndDLLHandle=0 then
begin
hndDLLHandle := loadLibrary ( "TestDLL.dll" );
if hndDLLHandle <> 0 then begin
@Proc := getProcAddress ( hndDLLHandle, "ShowChild" );
if addr (Proc) <> nil then begin
ResMDI := Proc(Application);
end else
showMessage ( "Function not exists..." );
end else
showMessage ( "DLL not found..." );
end
else
begin
@Proc := getProcAddress ( hndDLLHandle, "ShowChild" );
ResMDI := Proc(Application);
end;
finally
// freeLibrary ( hndDLLHandle );
end;
end;CODE>
Action := caFree; вызывает ошибку
← →
Eraser © (2005-01-17 15:18) [1]Что-то ты тут намудрил....
var
DllApp:TApplication; - это у чему???????!!!!!
Вместо конструктора Create используй CreateNew.
И убери объявление формы var Form:TDllChild; из локальных переменных процедуры и перенес в глобальные, т.к. форма у тебя немодальная, и она должна СУЩЕСТВОВАТЬ (вернее указатель на неё) после выплнения процедуры, он может и будет даже существовать и в твоём примере, но такой подход- не правильный.
А закрыть в обработчике события OnClose формы впиши Action:=caFree;
← →
mutabor (2005-01-17 15:27) [2]1.DllApp:TApplication
для перопределения application - иначе вызывающее приложение говорит что у него нет дочерних mdi форм
2. если вызываю CreateNew то ворма не "получаеться" mdi(кривые руки?)
3. теперь трабл сл:(приделал Action := CaFree)
при закрытии сначала дочерней формы , затем гравной все ок.
но при закрытии всего сразу(те основной) - вылетает Access
← →
mutabor (2005-01-17 15:28) [3](ошибки исправил)
1.DllApp:TApplication
для перопределения application - иначе вызывающее приложение говорит что у него нет дочерних mdi форм
2. если вызываю CreateNew то форма не "получаеться" mdi(кривые руки?)
3. теперь трабл сл:(приделал Action := CaFree)
при закрытии сначала дочерней формы , затем главной все ок.
но при закрытии всего сразу(те основной) - вылетает Access
← →
Eraser © (2005-01-17 16:13) [4]По-моему собака порылась в DllApp:TApplication; я могу ошибаться.
И зачем все эти изващения в Action1Execute?
← →
mutabor (2005-01-17 16:48) [5]про препересвоение контекста Application говорят в справке: это практически прямая копия кода
в Action закинул просто чтобы с кнопками не возиться
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c