XE2 exe and dcu location - delphi

I am attempting to move to XE2 from Delphi 6.
When I compile and create an exe the exe and dcu appear to be put in the \win32\debug directory under the project.
Is there any way to have it put the exe and dcu in the same directory as the project and source?

Go to the project options and remove these:

Related

No Release and Debug folders in Legacy Project

I'm trying to modernize a legacy Delphi project (probably from Delphi 7). I'm using Delphi 10.3.3 now.
When I build the project, Delphi creates the .exe file in the project directory. But I want the .exe file to be created in Win32\Release or Win32\Debug folder. How can I change it?

Procedure Entry Point invalid in JVCL (jclsysinfo)

I've installed latest Jedi VCL for Delphi (JVCL 3.49) using install.bat (from jcl and jvcl folders respectively), without errors. The problem is when I run Delphi 2010, I get a lot of errors about invalid entry point in jvcl bpls.
entry point invalid #jclsysinfo#jclcheckwinversion$qqrri in JvCore140.pbl
I get this error in all Jv*.bpl files, and always with the same entry point.
I've checked I don't have old jcl/jvcl files or jv*.bpl/jc*.bpl files. I don't know how to fix this problem. Any sugestion?
When compiling packages in Delphi (as the JCL and JVCL do) that require other packages at compiletime the compiler uses the dcp files for the required packages and not the bpl files of those packages.
For example the JvCore.dpk has Jcl and JclVcl in its required clause among some RTL packages. That means when compiling it will take Jcl.dcp and JclVcl.dcp to get the information where the procedures/classes it needs are located in the bpl.
These dcp files are most of the time (unless specified differently - see next paragraph) located in the DCP folder which is right next to the BPL folder.
If the dcp it uses is not compatible to the bpl it finds when loading you will get those errors. Make sure you don't have any old bpl and dcp files anywhere that the compiler may find. In the JCL setup you can specify where it puts those while the JVCL setup puts them into the same directory as the dcu files.
Additionally if you have different Delphi versions installed it can get worse because usually the dcp files don't have a suffix. If the directory it puts those happens to be in the PATH variable wrong versions might be found. However the DCP directory is not put into PATH by the Delphi installation but only the BPL directory.
(While I've been writing this, Stefan Glienke has posted an answer which has a lot more useful info in it, but I'll post it anyway because it's easy to test if you're only interested in one Delphi version)
I'm not sure the following will work for you because I don't have D2010
installed to test it against. You could check it out quite quickly by
trying it using only one .Dpk file in step 4.
Note that I always set the Output paths for BPL,
DCP and DCU files to a Lib2 folder under the Delphi version's install folder.
That way I know where they all are so it's easier to tidy up if something goes
wrong.
I uninstalled the JCL and JVCL and deleted all the JV*.BPL, .DCP and
.DCU files
I ran the JCL install .bat, and ignored all the prompts to add folders to
the system PATH, because my Lib2 folder is already on the PATH.
In the folder for my Delphi version below JVCL\Packages, I edited all the
.Dpk files to use my Lib2 folder for the BPL, DCP and DCU output files. this is
a bit tedious but only needs to be done once and can be made easier by doing it
using a keyboard macro.
Then, using the IDE package tool, compiled and installed all the JVCL .Dpk
files that have "Design" in their names and that I want to install.
They all installed without ther error message you are getting.

Installing Indy - which folders should be added to Delphi's Library list?

The directions on how to install Indy10 are (at least to me) a little vague in one place, and I'm hoping someone here can clarify a little.
The installation directions (From http://www.indyproject.org/sockets/Docs/Indy10Installation.en.aspx) state:
After Compiling
In your Indy directory you should now see some compiled .dcu files.
Open the IDE and go to the "Tools > Environment options > Select
Library" dialog tab. Now add the path to your files into the filepath
collection. Click Ok.
My Indy10 folder does not have any .dcu files in the root folder. It does have a bunch of DCU files in C:\code\Indy10\Output\DCU\Win32\Debug ... does this mean I should be adding C:\code\Indy10\Output\DCU\Win32\Debug to my library path? (And for that matter, should I be building Indy in Debug or Release mode, or does it matter?) Are there any other subfolders I need to add to the library path? Indy 10 has a much more complex folder structure than Indy 9 and I'm not convinced I've configured things "correctly".
Nearly every component package I install I touch the project options for the runtime package(s) to get a clean install.
Project Options
General Configuration
Output directory {componentpath}\lib\XE4\$(platform)\$(config)
Release Configuration
Output directory {componentpath}\lib\XE4\$(platform)
After that I compile the whole package for all target platforms in release and debug mode. Using a Build-Group is very useful to do that.
Now it is time to add the library paths (for each platform)
Library path {componentpath}\lib\XE4\$(platform)
Debug DCU path {componentpath}\lib\XE4\$(platform)\debug
Browse path all directories containing the source
In your own projects you can control which .dcu versions are used by setting the Use Debug-DCU option.

How not to compile installed packages everytime anew with the Application that uses it?

When I install a package in the IDE and use it in a project, it gets recompiled (DCUs are replaced) everytime I compile my project.
I can't imagine that this is intended - the RTL and VCL are not compiled each time either, are they?
I have played a bit with the paths in Tools > Options > Environment Options > Delphi Options > Library, but without success.
I have found a construction allowing compilation of my project without recompiling the package having DCUs and PASs in diffenent paths, but in this construction Delphi is not able to locate the sources at all from the Code Editor (SHIFT-clicking for example), so this is not an option.
To avoid recompilation you have to have separate folders for .dcu files and .pas files.
Usually this is done by settings the output dir in a package contained in the library. You build the package and it will produce the .dcu files in a output folder that is different from the source folder.
To use the package you then:
have to point the library path to the output folder (with the compiled .dcu files).
can optionally point the search path to the source folder (with the .pas files).
This gets a little more complicated when you have .dfm files in the package as well.
Every .pas file that the compiler sees in the library path is recompiled. (Actually only the last instance, because you can have the same unit in different directories that are listed in the library path).
To enable IDE features like CTRL-click you have to set the {$Y+} compiler switch in your package which can be done in the IDE Compiling options:
http://docwiki.embarcadero.com/RADStudio/XE4/en/Compiling#Debugging_Options

How split a Delphi solution into reusable run-time packages?

I'm starting with Delphi XE5 and I would like to split my application in one exe and multiple reusable libraries. That means I don't want to split the running *.exe application in DLLs or runtime Packages.
To achieve this, I have seen that in delphi we can create runtime packages and I followed the following steps:
I have created a new VCL Forms Application project (EXE project).
I have added a new Package project (BPL project) to the project group and I have modified its project options to set usage options to 'Runtime only' and build control to 'Explicit rebuild'.
I have added a dependency betwen the EXE project and the BPL project (EXE project depends on BPL project).
Finally I have compiled the BPL project and added the generated DCP file as a runtime package in the EXE project (Project options/Package/Runtime Packages).
But when I add a reference on the EXE project to use a module (moduleX for example) from the BPL project, compiler give me an error like this:
[dcc32 Fatal Error] ModuleX.pas(7): F1026 File not found: 'C:\DDDProject\MyEXEProject\ModuleX.dcu'
If I mark as checked the 'Link with runtime packages' option in the EXE project (MyEXEProject) the solution compiles without errors but I can't run or debug the application.
Please, can anyone help me?
I don't want to split the running *.exe application in DLLs or runtime Packages.
Runtime Package BPL files are DLLs. That is what allows them to be shared amongst multiple EXEs. They are just normal DLLs with special VCL/FMX handling built in.
When you enable the "Link with runtime packages" option, you are linking the EXE file to your BPL file (or DYLIB or SO file, if compiling for platforms other than Windows), so you MUST distribute the BPL file (and any other BPL files it depends on, like rtl190.bpl and vcl190.bpl) with your EXE file. So they have to be in the EXE's folder, or at least in the OS search path, in order for the EXE to run.
When you disable the "Link with runtime packages" option, your package's code is statically linked directly into the EXE file, so you need to make sure the EXE project's search paths include the folder were your package's DCU file(s) are located.
If you want to create a reusable library but not a BPL, then create a Static Library (a LIB file) instead of a Runtime Package. You can then add the LIB file to multiple projects as needed.

Resources