Zitat von
uvinul:
1., nur interessensmäßig, warum ist TCustomForm (exe) <> TCustomForm (
dll)?
Das hängt damit zusammen, dass der Bezeichner TCustomForm in Wirklichkeit ein Zeiger auf die
VMT (Virtual Method Table) der Klasse TCustomForm ist. Die
VMT wird vom Compiler zur Kompilierzeit erzeugt und in die Ausgabedatei (EXE und
DLL) geschrieben. Wenn du nun das Programm und die
DLL lädst, so existieren nun zwei VMTs, eine in der EXE und eine in der
DLL. Diese haben zwar den selben internen Aufbau, jedoch sind sie nicht Zuweisungskompatibel. Zudem existieren alle Methoden der Klasse als Maschinencode in der EXE und der
DLL, womit jede dieser VMTs andere Zeigerwerte für die virtuellen Methoden enthalten.
Zitat:
2. Wie funktioniert das mit den Packages, damit ich doch den Typecast durchführen kann?
Wenn du die
Unit, in der die Klasse deklariert hast, in ein
Package "verschiebst", so gibt es die Klasse nur einmal und die anderen Module (EXE und DLLs) können ohne Probleme darauf zugreifen, da der Compiler die schlimmste Arbeit abnimmt.
Zitat:
Gibt es noch andere Möglichkeiten, von der
Dll aus auf mein Objekt zugreifen zu können?
Ja, indem man alles, was der Compiler einem abnimmt, per Hand macht. Was aber nicht gerade wenig und einfach ist, da der Compiler ein paar mehr Möglichkeiten hat.
Für die Klasse TCustomForm gibt es bereits ein
Package:
vcl.