Zitat:
Und warum sind die nicht kompatibel? TIBQuery ist doch ein Nachfahre von TQuery, oder?
Selbst eine EXE.TQuery ist nicht kompatibel mit
DLL.TQuery.
Klassen können nicht aus
DLL's übergreifend benutzt werden !! Nur wenn die EXE und die
DLL die Packages
VCL??.bpl und VCLDB??.bpl verwenden können Klassen die in diesen Packages deklariert wurden übergreifend benutzt werden.
Wird das nicht so gemacht dann linkt der Compiler für die EXE und die
DLL jeweils separat die komplette
VCL ein. Somit ist die Klasse TQuery in der EXE nicht mehr identisch mit der Klasse TQuery in der
DLL. Sie sind zwar Speicherkompatibel, also der Klassenrecord in den Codesegemnten der EXE und
DLL sind identisch aufgebaut aber es sind NICHT der gleiche Record, eg. Speicherbereich. Da z.B. der IS und AS Operator aber auf der Speicheradresse der Klassendefinition aufbaut funktionieren diese Operatoren nicht mehr. D.h. eine TQuery erzeugt in der
DLL würde bei der Abfrage if (DLLQuery is TQuery) then ; in der EXE immer FALSE liefern.
Es ist also falsch
DLL's zu bauen die mit Klassen arbeiten auf die die EXE zugreifen will. Es sei denn man benutzt Packages.
Gruß Hagen