currently I move a project from Delphi XE to XE8. We use a component but the most recent version is for XE3 so I take the code and change it until it compiles. Now I want to install the design time package, but I get the error that rtl170.bpl is missing. No one refers to the rtl170 only to the rtl library. I read something about runtime packages but in this project I dont have this menu item under packages in the project options. Any advice? There was Delphi XE installed on this computer before but I deinstalled it before installing XE8.
2 Answers
is for XE3 so I take the code and change it until it compiles
Typically components consist of two BPL files, a runtime package and a designtime package (using the runtime one). Libraries of components (like Raize, JediVCL, DevExpress, whatever) consist of dozens of BPL pairs.
Take some tool to check DLL dependencies (examples: CFF Explorer or Microsoft Dependency Walker or WLX FileInfo ) and check your component BPLs - you have to determine which one of them the component's BPL is that requires the rtl170.bpl
DLL
It might be a helpful idea to either log BPL loading with something like SysInternals Process Monitor or just scan all your disks for those BPL names. It is possible that you have something like that:
- Newly built Design-time BPL you try to install (no link to rtl170)
- Newly built Runtime BPL (also no link to rtl170)
- Older Runtime BPL, the one built by XE3 and referencing rtl170. If it exists it is possible that the (1) BPL finds and loads (3) instead of (2), so no matter how many you would recompile (2) it would have no effect.
That is only a possible mix-up scenario, but it surely happens. Make sure there is no old remains of xe3-made BPLs.
Sometimes just finding and deleting stray old BPL fixe problems (example - that fixes upd4 for XE2 :-D ).
For the rest we consider you found not old rogue BPLs, and you foud the new XE8-compiled BPL still referecning rtl170.
Then, if you have full sources for the component - it might be helpful to delete (or temporarily move away) all their DCP/DCU files and force compilation from sources all of the packages. Again, you can snapshot a files access log of your Delphi compiling your package using tools like SysInternals Process Monitor. Sometimes it shows that for different reasons your Delhi ignores DPK/PAS source files and use old DCU/DCP for compilation instead.
Truly speaking, chances a low that XE8 would be compatible with DCU/DCP from XE3, still that is one of the avenues for research your situation.
Now we assume you have no any dcu/dcp/bpl files of you component lying explicitly on your HDD accessible to Delphi. Assume you made the only way to compile your components - to do it 100% from sources.
Chances are - those settings are either in .DPK file (or any other Pascal sources) of your faulty package, or in the .DPROJ fie for your faulty package (then they are accessible in IDE project Options dialog or via any XML editor). Or in both DPROJ and PAS/DPK files, sometime.
You are to find those settings and fix them fro m170 to the actual suffix of xe8 BPLs
I had the same problem, took me a while to find the solution. My current Delphi version is XE6 but when I tried to install a particular BPL it kept wanting to use rtl170. The BPL compiled ok but wouldn't install. There used to be a copy of XE3 on the machine but I had uninstalled it.
Turns out I had an old copy of the same runtime BPL in C:\Windows\sysWOw64. Once I deleted the copy in sysWOw64, XE6 complained no more.