Einzelnen Beitrag anzeigen

Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#1

mehrere Formular-DLL laden/entladen

  Alt 12. Mär 2013, 11:14
Delphi-Version: 7
Hallo,

ich habe ein kleines Demo-Projekt mit Luckies Code http://www.michael-puff.de/Programmi...ormInDLL.shtml zusammengestellt um das Problem zu erklären.
In dem Formular sind 2 Buttons, die jeweils eine Formular-DLL laden.
Also folgende Reihenfolge:
-Button1 drücken, lädt Form1
-Button2 drücken, lädt Form2
-Form1 beenden, beendet nicht, wie zu erwarten, Form1 sondern Form2

Es wird, egal welche DLL zuerst aufgerufen wird, immer in umgekehrter Reihenfolge des Ladevorgangs enladen.

Delphi-Quellcode:
{-----------------------------------------------------------------------------
Project:    Formular in DLL
Description: Aufruf eines Formulares aus einer DLL
Author:      Michael Puff, http://michael-puff.de
Date:        2011-12-22
-----------------------------------------------------------------------------}


...

procedure TForm1.btn1Click(Sender: TObject);
type
  TShowForm = procedure; stdcall;
var
  DLLForm1: THandle;
  ShowForm: TShowForm;
begin
  DLLForm1 := LoadLibrary('c:\Test\Form1.dll');
  if DLLForm1 <> 0 then
  begin
    @ShowForm := GetProcAddress(DLLForm1, 'Form1Anzeigen');
    if Assigned(ShowForm) then
    begin
      ShowForm;
      FreeLibrary(DLLForm1);
    end
    else
      ShowMessage(SysErrorMessage(GetLastError));
  end
  else
    ShowMessage(SysErrorMessage(GetLastError));
end;

procedure TForm1.btn2Click(Sender: TObject);
type
  TShowForm = procedure; stdcall;
var
  DLLForm2: THandle;
  ShowForm: TShowForm;
begin
  DLLForm2 := LoadLibrary('c:\Test\Form2.dll');
  if DLLForm2 <> 0 then
  begin
    @ShowForm := GetProcAddress(DLLForm2, 'Form2Anzeigen');
    if Assigned(ShowForm) then
    begin
      ShowForm;
      FreeLibrary(DLLForm2);
    end
    else
      ShowMessage(SysErrorMessage(GetLastError));
  end
  else
    ShowMessage(SysErrorMessage(GetLastError));
end;
Weiß jemand Rat?

Geändert von Memo (12. Mär 2013 um 12:04 Uhr) Grund: Code gerade gerückt
  Mit Zitat antworten Zitat