Ich bin kurz vor dem Verzweifeln. Was ist bei einem
VCL-Programm anders als bei einem
nonVCL/Konsolenprogramm? Ich habe hier in etwa folgenden Code:
Delphi-Quellcode:
rs := Interface.Create;
if(rs <> nil) then
try
try
rs.Connect;
except
rs := nil;
end;
if(rs <> nil) then
try
filter := rs.GetFilterInterface;
if(filter <> nil) then
try
filter.Create('Filter','');
except
// do nothing
end;
finally
rs.CloseConnection;
end;
finally
rs := nil;
end;
Es ist nur Pseudo-Code, sorry. Aber grundlegend sieht er so aus.
Wenn ich den Code jetzt in einem
VCL-Programm starte (besser gesagt: wenn ich das kompilierte
VCL-Programm starte), dann legt er den Filter mit dem leeren Inhalt an, schließt die Verbindung, und fertig. Mache ich das jetzt in einen
nonVCL/Konsolenprogramm, dann erhalte ich eine Zugriffsverletzung, und die Verbindung wird nicht richtig geschlossen.
Trotzdem wird der Filter angelegt, nur dass (im Gegensatz zum
VCL-Programm) diese Zugriffsverletzung erscheint. Ist der Filter nicht leer, also
filter.Create('Filter','Testinhalt');
dann geht es auf einmal.
Kennt jemand den Grund dafür?
Ich muss zugeben, ich habe keine Ahnung.