XE6 - XSLProd unit missing - delphi

I've just did a migration from XE3 to XE6.
Now I'm stuck with compile error [dcc32 Fatal Error] e.pas(6): F1026 File not found: 'XSLProd.dcu'. On XE3 this unit is under the path Embarcadero\RAD Studio\10.0\source\internet.
But under the same folder on XE6 there is no unit named like that.
I've search the whole folder for XslProd.pas file and the result was 0.
Does anybody know what happend to this unit - I guess there is a chance that this unit was removed some version prior to XE6.

This unit was removed in XE5. The classes that it contained are not to be found in any other unit in the source folder so one can only conclude that, either:
Embarcadero decided to remove the unit from the product for some reason, or
The unit was somehow removed by accident.
My guess is that the former is the case, that the unit was removed intentionally. And that the reason for doing so related to the development of the new mobile platforms.

Related

How do I tell Delphi to use the local project's Security.pas file rather than Winapi.Security.pas in DXS?

Delphi 10 Seattle introduces Winapi.Security.pas. The project (a package) I'm trying to upgrade already has a Security.pas file. Short of removing Winapi from the list of scope names for the project (huge undesirable ripple effect), is there a way to tell the IDE and compiler to use the project's Security.pas file instead of Winapi.Security.pas?
I already tried renaming the projects Security.pas, but that caused even more problems with the compiler generating errors that have nothing to do with the code it was complaining about, so that's a rathole I'd rather not go down right now. This project builds just fine unchanged in XE7, FWIW, so this isn't due to any code changes in the project.
Updates:
Renaming the file and using a unit alias doesn't work.
The compiler behavior for a package differs from an application.
Looks like this might actually be related to the Winapi.Security unit rather than something as generic as you suggest in the question. For instance, the following package compiles just fine:
package Package1;
requires
rtl;
contains
Windows in 'Windows.pas'; // blank unit named Windows.pas in project folder
end.
Note that I have, like you, included Winapi in the project's list of unit scope names.
On the other hand, this package does not compile:
package Package1;
requires
rtl;
contains
Security in 'Security.pas'; // blank unit named Security.pas in project folder
end.
The compiler fails with:
[dcc32 Error] Package1.dpk(7): E2200 Package 'rtl' already contains unit 'Winapi.Security'
If the issue was purely related to unit scope names then either both packages would compile, or both would fail. Hence my conclusion that there is something out of whack with Winapi.Security.
I can find no source code for Winapi.Security. I wonder what it actually is. [Nicholas Ring located the source for me, inside the rtl\win\winrt directory.]
Anyway, I think it's time to submit a QP report. The package below that fails to compile is probably the starting point for that QP report. [Your submitted report is here RSP-12469.]
It seems clear to me that in the short term you must rename your unit if you wish to adopt Seattle.
FWIW, here are some other units that behave the same way as Winapi.Security:
Winapi.ApplicationModel
Winapi.CommonTypes
Winapi.Devices
Winapi.Foundation
Winapi.Gaming
Winapi.Globalization
Winapi.GraphicsRT
Winapi.Management
Winapi.Media
Winapi.Networking
Winapi.Storage
Winapi.UI
Winapi.WebRT
These are all newly added WinRT units which I expect is important.
If you put both Winapi.Security and your local Security in the same uses clause then you are able to access the members of both of them without issue. If you put them in separate uses clauses (Interface vs. Implementation) then you will get the error:
E2004 Identifier redeclared: 'Winapi.Security'
If I only include Security.pas in the uses clause (and it is included in the project) then it accesses its members just fine.
Perhaps I need more information about what error you are running into? I'll send you a sample project that shows this working.
I might well be wrong, but I believe that if Security.pas is in the uses clause of the dpr file, along with its full path, it will be preferred over whichever file can be found via the namespaces and search paths.
Open project settings, in the Delphi Compiler section remove "Winapi" from "Unit scope names".
This way, when you need the Security unit shipped with Delphi, you'll have to write Winapi.Security, and if you write Security, it will use your custom Security unit.

EPackageError caused by a unit that is implicitely imported

I'm currently involved in a Delphi XE5 project and I'm facing a problem that I could not solve. I have a Delphi project group that conists of one EXE; this EXE loads multiple runtime BPL's dynamically. These BPL's are also part of the project group. However, when I run the application, I got the error 'Project {MyProject.exe} raised exception class EPackageError with message 'Cannot load package 'PumpMethod'. It contains unit 'FlEdit', which is also contained in package 'eXtractionUnitMethod'.
I already searched on SO, and I've found the cause. Especially Is "implicitly imported" always a bad thing in Delphi packages? was of big help. During compilation, both BPL's of my project, emit the following message:
[dcc32 Warning] PumpMethod.dpk(46): W1033 Unit 'FlEdit' implicitly imported into package 'PumpMethod'
Other one as well:
[dcc32 Warning] eXtractionUnitMethod.dpk(46): W1033 Unit 'FlEdit' implicitly imported into package 'eXtractionUnitMethod'
But the point is that FlEdit, a textbox control that allows only the input of floats, is already part of an installed package. This package, 'Spark190.bpl', contains the control, and thus also the FlEdit unit. I've registered it and the control appears on the Tool palette. This is the project with the control:
There is also a project DclSpark190.bpl, but that is a design time package (contains the registering of the controls). When I close this project group and create a new one, I can drag/drop 'My float edit' on a form, and this runs all fine.
When I now open the project group with the EXE, and build the BPL's I got this message:
This again seems okay for me. The Spark package (with the FlEdit) is now included in the 'requires' list:
But when I compile again, the 'the following changes...' is shown again. That looks abnormal to me; the Spark BPL is already included in the requires list? So:
Q1: Why is that happening? Is it a bug in Delphi XE5? Do I something wrong here?
Also, the 'FlEdit' implicitly imported into package 'PumpMethod' is still not away:
So:
Q2: I think I've put FlEdit in a separate package 'Spark'. Both BPL's contain 'Spark' in the required package list, but still the warning (W1033) is shown. What else can I do?

delphi d2009 update 3 dcc32 build options. Win XP

I have a seemingly unsolvable (to me!) problem.
If I start a simple vcl forms app and try to compile, I get multiple warning/errors as follows :
[DCC Warning] SysUtils.pas(6082): W1000 Symbol 'SInvalidInteger' is deprecated: 'Use SysConsts.SInvalidInteger'
etc.
[DCC Fatal Error] Variants.pas(1071): F2092 Program or unit 'Variants' recursively uses itself
The library path options both in the global and project sections seem Ok,
but if I hover over the dcc32.exe build or output messages, I can see a vast selection of
paths which are not relevant and also are repeated about 3 times.
The dcc32.cfg is quite short and seems Ok.
It looks like the path is corrupt somehow and although I've reinstalled D2009 (after deleting the program) and also cleared the registry, I cannot seem to solve this problem.
question : how can I reset or clear this dcc32.exe path - where is the option file, or is it created on the fly?
This problem occurred when I tried to compile a D7 project/or added JCL/jvcl (now removed)
Thanks for any ideas!

Delphi - compiler continue on error

Is there any possibility to make compiler continue when errors are encountered during the compilation an application in D2006? I want to know how many errors it finds on an application.
No there is not. The problem is that once the compiler can't compile one unit, it's in no position to compile the other ones that, more than likely, depend on the unit that could not be compiled. This is because compilation of a unit requires a .dcu file for all of the used units.

Unit SysUtils was compiled with a different version of SysConst.SMonitorLockException when trying to compile project in Delphi 2009

I'm trying to compile a project and I'm getting this error.
The error occurs in a RemObjects source file, but I think it doesn't have anything to do with RemObjects.
Anyway this error is too generic, and I don't quite get why it happens, so how can I solve it?
The problem was that we translated the unit SysConsts and the Interface changed, removing that unit solved the problem.
This error occurs if you mix libraries. You are probably using a (third-party) library that is compiled with a different version. Try to get the latest version, or recompile if you have the source.
If the problem persists, try to get a minimal subset of the project to find the offending unit / dcu file.

Resources