Hi,
ich bastle gerade mit ein paar Delphi Packages rum.
Im Moment hab ich ein Programm und 2 Packages. In Package1 ist eine abstract class enthalten die von einer
Unit
im Programm implementiert wird. Das Programm erstellt auch ein Objekt dieser abgeleiteten Klasse.
Das Package2 lade ich dynamisch über LoadPackage() in das Programm. Das ganze Package2 besteht aus nur einer prozedur
die eine Referenz auf die in Package1 deklarierte abstract class erwartet.
Nachdem ich die package2.bpl im Programm geladen habe greife ich über die exportierte prozedur darauf zu und übergebe
dabei self, da das package2 innerhalb einer procedure von der abgeleiteten klasse geladen wird.
In der prozedur (im package2) kann ich jetzt beliebig an dem objekt rummachen, variablen auslesen usw.
Wenn ich aber eine Variable setze oder generell schreibend darauf zugreife, funktioniert das zwar, wenn ich dann aber
wieder zum Programm zurückkehre und dort ebenfalls schreibend auf self zugreife gibts ne
Access Violation.
In Programmcode ausgedrückt:
Delphi-Quellcode:
...
p := GetProcAddress(alib,PChar('
LoadLib'));
@AMethod := p;
Method(self);
// hier wird dann z.B. self.name := 'foobar'; ausgeführt
self.
name := '
wasanders';
// Access Violation
...
Wenn ich anstatt den namen zu setzen einfach nur den namen ausgeben lasse (im
package) kann ich hinterher noch schreibend zugreifen.
nur wenn das
Package self verändert kracht es...
Gibts da irgendwelche internen locks die den schreibenden Zugriff verbieten nachdem das
Package daran rumgefummelt hat?
Langsam gehen mir die Ideen aus an was das liegen könnte