procedure TForm2.Button1Click(Sender: TObject);
var
test : TStringList;
begin
test.create();
test.add('Test'); (oder auch test.LoadFromFile(test.txt);)
test.clear;
end;
Macht beim Ausführen jedesmal in der Zeile Test.add oder auch bei LoadFromFile eine Exception Class "External: SIGSEGV'...
Hat da jemand von euch ne Idee wodran das liegen könnte?
Ist natürlich syntaktisch korrekt, aber nie sinnvoll. Ich habe nie verstanden, warum der Compiler da keine Warnung oder noch besser eine Fehlermeldung generiert.
function createmainform(const aclass: tclass;
const aclassname: pshortstring): tmsecomponent;
begin
result:= tmsecomponent(aclass.newinstance);
tcomponent1(result).setdesigning(true);
//muss vor create() gesetzt werden um automatisches streamen zu verhindern
tcustommseform(result).create(nil,false);
tmsecomponent1(result).factualclassname:= aclassname;
end;
Zuletzt geändert von mse am Do 14. Jan 2010, 21:51, insgesamt 1-mal geändert.
Hitman hat geschrieben:Da rufst du das ja aber trotzdem von einer Klasse und nicht von einem Objekt auf.
"result" ist eine Objektinstanz die von der Klasse tmsecomponent abstammt. Die Typenkonvertierung mit tcustommseform(result) ändert daran nichts. Beim IDE-Bau müssen solche unschönen Kniffe leider häufig angewendet werden.
theo hat geschrieben:Es hat aber mit dem Beispiel nicht viel zu tun.
Es ging darum zu zeigen, dass objectinstanz.create() nicht nie sinnvoll ist wie mschnell schrieb. Ich bitte um Entschuldigung, falls ich das zu wenig klar ausgedrückt haben sollte.
mse hat geschrieben:Entschuldigung, falls ich das zu wenig klar ausgedrückt haben sollte.
Schon OK, das Thema ist ja eigentlich ganz interessant.
Habe hier noch einen Artikel dazu gefunden (Delphi, FPC dürfte ähnlich sein): http://oreilly.com/catalog/delphi/chapter/ch02.html" onclick="window.open(this.href);return false; zum aktuellen Thema nach dem Titel "Calling a constructor" suchen.