Einzelnen Beitrag anzeigen

Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#1

COM-DLL mit langen Dateinamen registrieren (Breakpoints)

  Alt 21. Nov 2008, 08:50
Hallo zusammen,

wir haben da ein Projekt das einige COM DLLs enthält. In diesen DLLs will ich debuggen, also Breakpoints verwenden.

Wenn ich die Hostapplikation starte werden die Breakpoints im Source der COM DLL plötzlich grün (also nicht wirksam, deaktiviert, wasauchimmer).

Ich habe mir daraufhin die Einträge, die die DLL in der Registry beschreiben angesehen. Diese waren mit kurzen Dateinamen eingetragen (Tilden im Dateinamen, da Leerzeichen enthalten sind). Ändere ich diese in die lange Form des Dateinamens funktionieren die Breakpoints auch wieder.

Schön und gut. Allerdings werden, soblad man die DLL neu registriert die Dateinamen wieder in die kurze Form geändert. Das ist auf die Dauer ziemlich lästig, zumal unsere COM DLLs eine grosse Anzahl von Interfaces registrieren (es müssen also nicht nur 2 oder 3 Registryeinträge geändert werden sondern wesentlich mehr)

Weiss jemand, wie man eine COM DLL registrieren kann, sodass lange Dateinamen in die Registry eingetragen werden?

Ich frage, weil in TComObjectFactory.UpdateRegistry diese Zeilen zu finden sind:

Delphi-Quellcode:
    CreateRegKey('CLSID\' + ClassID, '', Description);
    ShortFileName := FComServer.ServerFileName;
    if AnsiPos(' ', ShortFileName) <> 0 then
      ShortFileName := ExtractShortPathName(ShortFileName);
    CreateRegKey(ServerKeyName, '', ShortFileName);
Hier wird also, falls ein Leerzeichen im Serverfilenamen enthalten ist, der Filename extra in die kurze Form umgewandelt. Man könnte also TComObjectFactory.UpdateRegistry einfach in einer abgeleiteten Factoryklasse überschreiben (ist ja virtuell) und diese Konvertierung dann weglassen.

Oder würde etwas dagegen sprechen? Schliesslich wird sich der Autor dieses TComObjectFactory.UpdateRegistry eventuell etwas dabei gedacht haben, den Dateinamen extra umzuwandeln, oder?

Dieses Problem ist mir übrigens vorher nie aufgefallen, da das Projekt auf meinem alten Rechner in einem Verzeichnis ohne Leerzeichen im Dateinamen gespeichert war.

Ciao,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat