closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

Fix64ToLongInt Frage



TheBeginner offline
Schreiberling
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 64
Posts: 619
Registered: 06 / 2013
Private message
Subject: Fix64ToLongInt Frage  -  Posted: 04.01.2022 - 19:05   -  
Hallo,
eine kleine Frage an euch, ich habe eine 2te Unit und da habe ich das drin

LW:= Fix64ToLongInt(abs(tmp_fix));

Warum bekomme ich da einen Error identifier or factor expected

Muss ich in der zweiten unit noch was mit einbinden ?
In mein Hauptprogramm geht es ohne Fehler.


Gruß Frank
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
TheBeginner offline
Schreiberling
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 64
Posts: 619
Registered: 06 / 2013
Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 04.01.2022 - 21:50   -  
Sorry das hätte ich noch mit schreiben sollen, es gibt eine 3te Unit mit alle Var´s

Units sind mit Uses eingebunden

Gruß Frank
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
Merlin offline
Administrator
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 1115
Registered: 03 / 2005
Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 04.01.2022 - 22:08   -  
There is not enough information here Frank. If you send me your project I will be able to tell you.
Merlin.

:magic:

Software is a black art.
go down go up
TheBeginner offline
Schreiberling
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 64
Posts: 619
Registered: 06 / 2013
Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 04.01.2022 - 22:10   -  
Thanks Merlin for your answer, I'll get everything ready for you tomorrow

Danke Merlin für deine Antwort, ich mache dir morgen alles fertig


Gruß Frank
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
TheBeginner offline
Schreiberling
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 64
Posts: 619
Registered: 06 / 2013
Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 05.01.2022 - 07:29   -  
Guten morgen, das kann doch nicht sein ???
In meinen Hauptprogramm verwende ich uses für weitere units, aber ich muss uFix64
als erstes setzen ?


Good morning, this can't be ???
In my main program I use uses for other units, but I have to set uFix64
first ?



Ohne Fehler
Code

uses
  uFix64,            //<===============

  Merlin_Wz_Driver,
  Merlin_DHCP,
  Version,
    TransferStruct,
  RxTxHandling,
  uFAT16_32,  uFat1632,
  _unit_var,
  unit_send_an_Host;




Mit Fehler
Code

uses
   Merlin_Wz_Driver,
   Merlin_DHCP,
   Version,
  
   TransferStruct,
   RxTxHandling,

   uFAT16_32,  uFat1632,
   _unit_var,
   uFix64,                          //<==================
   unit_send_an_Host;



Gruß Frank
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
Avra hidden
Schreiberling
Avatar
Gender: male
Location: SERBIA  Belgrade, Serbia
Age: 50
Posts: 642
Registered: 07 / 2002
Homepage Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 05.01.2022 - 09:30   -  
Quote by TheBeginner
LW:= Fix64ToLongInt(abs(tmp_fix));

Warum bekomme ich da einen Error identifier or factor expected

I am not sure that I understood online translation well, but maybe you need to use Fix64Abs() instead of Abs()?

Merlin, does Abs() have a special treatment of TFix (or fix64) type?
This post has been edited 1-times. Last edit: 05.01.2022 - 09:36 by Avra.
go down go up
TheBeginner offline
Schreiberling
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 64
Posts: 619
Registered: 06 / 2013
Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 05.01.2022 - 09:40   -  
Hello Avra, no that wasn't it, I had to enter uFix64 as the first one in Uses, I don't understand why either. Believe me, I've searched and searched and I don't understand it, it shouldn't matter how and when I first register a unit.


DE:::::::::::::
Hallo Avra, nein das war es nicht, ich musste bei Uses als erstes uFix64 angeben, warum verstehe ich auch nicht. Glaube mir ich habe gesucht und gesucht und ich verstehe es nicht, es sollte doch egal sein wie und wann zu erst ich eine Unit einschreibe.


Gruß Frank
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
Avra hidden
Schreiberling
Avatar
Gender: male
Location: SERBIA  Belgrade, Serbia
Age: 50
Posts: 642
Registered: 07 / 2002
Homepage Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 05.01.2022 - 09:49   -  
Quote by TheBeginner

no that wasn't it, I had to enter uFix64 as the first one in Uses

Have you actually tested faulty compilation case with Fix64Abs() instead of Abs()?
go down go up
Merlin offline
Administrator
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 1115
Registered: 03 / 2005
Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 05.01.2022 - 10:10   -  
Hi Frank.

The order of units is important for visibility. Pascal was designed to allow single pass compiling. So it addresses the first uses clause first. That means for the first unit in the 'uses' list none of the others is visible to it. For the second unit, only the first is visible. For the third, only the first two are visible, and so on.

For that reason, I treat units as I would in Delphi. In each separate unit I add a uses clause that lists all the secondary units I need in that unit. Adding the same secondary unit in the uses clause of multiple units presents no problem to the compiler and ensures that the units are dealt with in the right order.

I hope that makes sense.

@Avra I don't know the answer to your question and the compiler is so complex that it is difficult to check. Sorry.

================================================================================

Die Reihenfolge der Einheiten ist wichtig für die Sichtbarkeit. Pascal wurde entwickelt, um eine Kompilierung in einem Durchgang zu ermöglichen. Deshalb wird die erste uses Klausel zuerst angesprochen. Das bedeutet, daß für die erste Unit in der 'uses' Liste keine der anderen Units sichtbar ist. Für die zweite Unit ist nur die erste sichtbar. Für die dritte sind nur die ersten beiden sichtbar, und so weiter.

Aus diesem Grund behandle ich Units wie in Delphi. In jeder separaten Unit füge ich eine uses-Klausel hinzu, die alle sekundären Units auflistet, die ich in dieser Unit benötige. Das Hinzufügen der gleichen sekundären Unit in der uses-Klausel mehrerer Units stellt für den Compiler kein Problem dar und stellt sicher, dass die Units in der richtigen Reihenfolge behandelt werden.

Ich hoffe, das macht Sinn.

@Avra Ich kenne die Antwort auf Ihre Frage nicht und der Compiler ist so komplex, dass es schwierig ist, das zu überprüfen. Tut mir leid.
Merlin.

:magic:

Software is a black art.
go down go up
TheBeginner offline
Schreiberling
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 64
Posts: 619
Registered: 06 / 2013
Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 05.01.2022 - 10:46   -  
Wau .. but first someone has to figure it out.
I only discovered this by accident

Wau.. da muss aber erstmal einer drauf kommen.
Ich habe das nur durch zufall entdeckt


Gruß Frank
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
Merlin offline
Administrator
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 1115
Registered: 03 / 2005
Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 05.01.2022 - 12:12   -  
Hi Frank.

In the manual (docuCompiler) it says

Quote
A uses-clause in a program or a Unit defines the Units which
are used by this module.


Had you followed this advice you would not have had a problem, and indeed in Delphi this is the mandatory way to go. Rather there is a side effect of the way the compiler works in that sometimes you can get away with not following this advice and by putting the uses clause in the main program. I would argue this this side effect is what you discovered by accident, and should not be considered part of the intended design. Therefore the complaint if any, should be that this side effect should be banned. But that would increase the complexity of the compiler and slow it down, as well as rendering countless programs uncompilable, so I do not intend to change it.

=======================================================

Hallo Frank.

Im Handbuch (docuCompiler) heißt es

Quote
Eine uses-Klausel in einem Programm oder einer Unit definiert die Units, die
von diesem Modul verwendet werden
.

Hätten Sie diesen Rat befolgt, hätten Sie kein Problem gehabt, und in der Tat ist dies in Delphi der vorgeschriebene Weg. Vielmehr gibt es einen Nebeneffekt der Arbeitsweise des Compilers, der dazu führt, dass man manchmal davonkommt, wenn man diesen Rat nicht befolgt und die uses-Klausel in das Hauptprogramm einfügt. Ich würde argumentieren, dass dieser Nebeneffekt von Ihnen zufällig entdeckt wurde und nicht als Teil des beabsichtigten Designs betrachtet werden sollte. Daher sollte die Beschwerde, wenn überhaupt, lauten, dass dieser Nebeneffekt verboten werden sollte. Aber das würde die Komplexität des Compilers erhöhen und ihn verlangsamen sowie zahllose Programme unkompilierbar machen, daher habe ich nicht die Absicht, ihn zu ändern.
Merlin.

:magic:

Software is a black art.
go down go up
TheBeginner offline
Schreiberling
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 64
Posts: 619
Registered: 06 / 2013
Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 05.01.2022 - 12:22   -  
No Merlin, you shouldn't change anything, I now know how to do it right. But believe me I have searched and searched.
I even wrote a small test program this morning, only with uFix64 and it worked immediately. And then I got the idea to put uFix64 up first

Nein Merlin, du sollst nichts ändern, ich weiß es jetzt wie man es richtig macht. Aber glaube mir ich habe gesucht und gesucht.
Habe heute morgen sogar ein kleines Test Programm geschrieben, nur mit uFix64 und da ging es sofort. Und dann bin ich auf die Idee gekommen uFix64 nach oben als erstes zu setzten
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
Merlin offline
Administrator
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 1115
Registered: 03 / 2005
Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 05.01.2022 - 12:37   -  
Quote
I now know how to do it right.


Actually Frank, I am not sure that you do.

To do it right you should put

Code
Uses
...
uFix64
....


in every unit that uses uFix64.

Otherwise you risk having to forever juggle the order of units in the main program. Doing it the correct way allows the compiler to do the juggling for you.

=========================================================


Quote
Jetzt weiß ich, wie man es richtig macht.


Ehrlich gesagt, Frank, bin ich mir nicht sicher, ob Sie das wissen.

Um es richtig zu machen, sollten Sie

Code
Verwendet
...
uFix64
....


in jeder Einheit, die uFix64 verwendet.

Andernfalls riskieren Sie, dass Sie die Reihenfolge der Units im Hauptprogramm ständig ändern müssen. Wenn Sie es richtig machen, kann der Compiler das Jonglieren für Sie übernehmen.

Regards
Merlin.

:magic:

Software is a black art.
This post has been edited 1-times. Last edit: 05.01.2022 - 12:38 by Merlin.
go down go up
TheBeginner offline
Schreiberling
Avatar
Gender: n/a
Location: GERMANY  Wunsiedel Bayern
Age: 64
Posts: 619
Registered: 06 / 2013
Private message
Subject: Re: Fix64ToLongInt Frage  -  Posted: 05.01.2022 - 12:43   -  
Hello Merlin, I have just tested that, yes I understand what you mean, I now also have uFix64 in the unit_var unit and it doesn't matter now
where I write my uFix64 in my main program.
Thanks for your tip.

Greetings Frank
Hallo Merlin, das habe ich gerade getestet, ja ich verstehe es was du meinst, ich habe jetzt auch in der unit unit_var uFix64 drin und es ist jetzt egal
wo ich mein uFix64 in meinen Hauptprogramm hin schreibe.
Danke für deinen Tipp.

Gruß Frank
------------------------------------------------------------------------
Als Gott mich schuf wollte er angeben.
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 25.01.2022 - 14:25