Ich bin hier eben auf eine Problem gestossen, das mir bisher nicht aufgefallen ist. Wenn ich eine
COM-Klasse registriere wird im InprocServer32 RegKey der kurze anstatt dem langen Dateinamen gespeichert, wenn der Dateipfad eien Space enthält. Das ist nicht mehr aktuell (war es das jemals?) und der Code in System.Win.ComObj.pas (TComObjectFactory.UpdateRegistry) mach da Blödsinn, sobald im Dateipfad ein Space enthalten ist:
Delphi-Quellcode:
if AnsiPos(' ', ShortFileName) <> 0 then
ShortFileName := ExtractShortPathName(ShortFileName);
Keine Anhung wieso das da gemacht wird und ob das irgendwas uraltes ist, das man schon längst hätte entfernen können? Wenn ich da die
COM Klassen Registrierungen in meiner Registrierung anschaue, gibt es da diverse MS
COM Klassen, die beim InprocServer32 Eintrag beim Dateipfad Leerschläge enthalten. Das kann also keine Vorgabe sein und da macht Delphi doch das falsch.
Das Problem ist wie folgt bei mir aufgetreten. Ich habe den Ordner, in dem die registrierte
DLL liegt, in einen neuen Ordner kopiert und den alten gelöscht. Dann habe ich den neuen wieder umbenannt auf den alten Name. Grund für dieses seltsame Vorgehen war eine "Macke" im Dateiordner. Nun hat dieses Kopieren und Umbennen dazu geführt, dass der kurze Dateiname sich geändert hat, obwohl der Lange identisch wie vorher ist. Dadurch wurde die
COM Klasse nichtmehr gefunden.
Ist das in Delphi 11 auch noch so? Sollte man da eine Bug melden? Kann das mal einer in System.Win.ComObj.pas (TComObjectFactory.UpdateRegistry) checken?