Nicht nur Variablen, sondern auch Typen.
TForm der EXE ist etwas ganz Anderes, wie TForm der DLLs.
Typprüfungen ala
IS
schlagen dann fehlt und auch beim Casten kann es schnell knallen, da der Compiler manchmal was wegoptimiert und schon stimmen Speicheroffsets nicht mehr.
Delphi-Quellcode:
// in EXE
TForm =
class
A: Integer;
B: Integer;
C: Integer;
end;
// in DLL
TForm =
class
A: Integer;
//B: Integer; das hat der Compiler wegoptimiert, weil es in der DLL nicht verwendet wurde
C: Integer;
end;
Wenn die EXE also auf B einer Form in der
DLL zugreifen will, dann erwischt es das C.
Wobei es schon problematisch genug ist, dass EXE und
DLL eigene Variablen haben.
Da gibt es die globale Instanz von Application, wo EXE und
DLL Eigene haben, dann die globalen Fonts, Brushs und vorallem Listen für "vorhandene" Fenster und active Forms/Controls in Application und Screens usw.