Einzelnen Beitrag anzeigen

Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#1

COM Klassen werden mit kurzen Dateinamen registriert

  Alt 15. Sep 2021, 19:34
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?

Geändert von Rolf Frei (15. Sep 2021 um 19:42 Uhr)
  Mit Zitat antworten Zitat