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