Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi COM-DLL mit langen Dateinamen registrieren (Breakpoints) (https://www.delphipraxis.net/124573-com-dll-mit-langen-dateinamen-registrieren-breakpoints.html)

Ralf Kaiser 21. Nov 2008 08:50


COM-DLL mit langen Dateinamen registrieren (Breakpoints)
 
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

ogiesen 5. Mai 2014 15:18

AW: COM-DLL mit langen Dateinamen registrieren (Breakpoints)
 
Der Vollständigkeit halber für alle, die hier über eine Suche landen, wie ich :wink: : Dieses Problem wurde angeblich in Delphi XE5 gefixt: http://qc.embarcadero.com/wc/qcmain.aspx?d=118309

Bin selber leider noch auf XE4. Kann mir jemand sagen, ob tatsächlich nur die beiden für die Konvertierung zuständigen Zeilen entfernt wurden, oder wurde da doch noch etwas mehr gemacht?

Cheers,

Oliver


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz