• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1436
  • Last Modified:

[Fatal error]Internal Error L3169

[D7, XP]
Hi all,
when I build My project, I always get this error : [Fatal error]Internal Error L3169 and I don't know why.

I have tryed :
   restart Delphi
   restart system
   Set the last new Code lines in coment (as far as i remember)
   Compile the project on another system
   Delete all .dcu files

what can I do in order to remove this <#censored#> error ?
The question point value is 500 cause of it'sextremely urgent.
Thanks forany idea.
  • 3
  • 2
  • 2
  • +4
1 Solution
I've solved the same error by commenting parts of code.
After the problem part of code was founded the only way to solve the problem was manually code rewriting.
Ferruccio AccalaiSenior developer, analyst and customer assistance Commented:
There's some DBExpress units dcu included in uses clause?
In my System for example, adding the DbExORA (Oracle driver) unit to the uses clause give me the same error and running the project from ide causes an immediatelly restart of the machine (W2K Sp4 and D6 Up2)...Someone had the same problem too and solved it using the Dll without any link in the uses clause....

If this is the case try removing the DBExpress units from uses and look what happens...Since now i've never found a good solution for this error....and nothing is mentioned about this in Borland SIte too :(

Delete the tds file as well, then make sure you force a full rebuild.

Duff CR/LF line-ends can also cause problems. Can you tell roughly which line (or even which module) is causing the problem?

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Delete the block of code around where the error occurs and rewrite it. It's a pain in the backside but from my experience it seems to be the only way out.

Geoff M.
Open the code in wordpad with the wordwrap option set to off. Do a minor change (add a space or something) and save the file. That will do with CR/LF errors.

Go to the Borland site and download the patches (registrated users have access only).
Install the patches.

Good luck, that's also needed.



EKIMAuthor Commented:
Hi All

Thanks for all your ideas, but none of those seems to solve my problem.
After deep looking (and a big headache) I found this:
I have a class that owns  1077 published properties. If I set 20 of those in comment : I do not get the error anymore, If I removethe comments, the error come back...

It seems to mean that a Class cannot have more that 1057 published properties ??
Does anybody can tell me more about this ?

L3169: Unexpected condition in the linker (capital L like linker). The error occurs in source line 3169 (not your source but Borlands).
Sometimes it is possible to avoid the error by stupid things like:
 - Renaming variables
 - Removing variables
 - Adding more variables
 - Restructure code
 - Split procedures / functions
 - Merge procedures / functions
 - Migrate to next version of Delphi
 - Wait for bugfix
 - Rebuild all
 - Split units
 - ...
>Thanks for all your ideas, but none of those seems to solve my problem.
You've said: " If I set 20 of those in comment"
I've recommended you in my first post: "I've solved the same error by commenting parts of code."
Commenting out parts of the code doesn't sound like the best of ideas - after all why write it only to comment it out later?!?!?!

Having 1057 properties in a single class seems a bit over the top. Perhaps you need to break it down into descendant classes. For example, if you had a THuman class, maybe you need to split it into a TMale and a TFemale class. That way all the cooking and cleaning properties can go into the TFemale class and the TMale class has nothing to do with it... er oops, maybe I shouldn't go there!

Geoff M.
EKIMAuthor Commented:
Gloomyfair : yep, but If i manually rewrite the code (as you sugested), the error came back, and I need this code. this is just a proof that the problem comes from the number or properties. it doesn't solves it.
gmayo : You are right. But I would prefer toavoid this solution.This class has 1057 float properties, all of them are a result from financial calculation. for each property there is a method that compute the result. something like this :

Procedure Calc_GlobalCeiling
Procedure Calc_TotFinResult
Procedure Calc_CashFlowRatio

Property GlobalCeiling : Float  read... write ...
Property TotFinResult  read ... write ...
Property CashFlowRatio read... write ...

Procedure MyClass.Calc_GlobalCeiling;
   GlobalCeiling :=  Min( TotfinRes ,TotfinRes* CashFlowRatio );
And so on for all the 1057 properties. (and I have +/- 1000 properties to add...).

GMayo : Be sure that if nobody can help me with compiling this class with its 1057 properties, the points will be yours.

Surely you don't need them all to be published?

And, rather than separate properties, how about a function:

GetResult( resulttype )
where resulttype is an enum for the one you want.

You could even do this as an array property.

That also has the advantage of, when coding using this component, you can do things like iterate through all the values in a loop, rather than having to fetch them separately, with unique property names each time.

I propose commenting just as a method to localize the problem.
And it's seems to me that EKIM have used it after my post.

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 3
  • 2
  • 2
  • +4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now