Deutsch
Forum

MakeLong, woher der Unterschied?

 
Hallo Roland - warum reagieren beide MakeLongs unterschiedlich? Typenkonvertierung? Das hat in einem großen Code von mir für sehr viel Furore geführt
KompilierenMarkierenSeparieren
def MakeLong2(2) OR(@&(1),MUL(@&(2),$10000))
print Makelong(5,0)
print makelong2(5,0)
declare m#
dim m#,2
byte m#,0=65
byte m#,1=chr$(0)
print string$(m#,0)
print "Ab hier:"
print makelong2(m#,0)
print makelong(m#,0)
waitkey
 
10.10.2006  
 




Jörg
Sellmeyer
Keine Ahnung, aber interessant ist auch, daß diese (eigentlich gleiche) Definition den Wert ohne Dezimalpunkt und Nullen ausgibt:
KompilierenMarkierenSeparieren
Def MakeLong3(2) @&(1) | (@&(2) * $10000)
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
10.10.2006  
 



Naja weil XProfan halt alles Floatet...
 
10.10.2006  
 




RGH
Hallo iF,

die beiden Parameter der Funktion MakeLong müssen natürlich vom Typ Word (2 Byte) sein. Aber m# alleine ergibt ja die Adresse von m# und diese ist natürlich ein LongInt (4 Byte). Deine Funktion überprüft das nicht, und kommt daher zu einem anderen Ergebnis. Die XProfan-Funktion berücksichtigt aber nur jeweils ein Word, also fallen die beiden höherwertigen Byte der Adresse unter den Tisch. (Aus Geschwindigkeitsgründen verzichte ich auf eine Fehlermeldung.)

Wenn Du allerdings das Word in m# benutzen wolltest, müßtest Du schreiben:
KompilierenMarkierenSeparieren
!print makelong2(word(m#,0),0)
print makelong(word(m#,0),0)

... und dann sind sich beide Funktionen wieder einig!

Natürlich kannst Du auch Dein DEF anpassen, sodaß es nur Words akzeptiert, bzw. den Word-Anteil eines zu großen Parameters:
KompilierenMarkierenSeparieren
!def MakeLong2(2) INT(OR(AND(@&(1),$FFFF),MUL(AND(@&(2),$FFFF),$10000)))

Dann funktioniert es exakt wie die XProfan-Funktion.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
10.10.2006  
 



Alles klar! Es ist aufgefallen weil ein Sendmessage Parameter 4 mit dem XProfan10eigenen MakeLong scheiterte , was zuvor jedoch problemlos ging. Bist Du Dir sicher das der XProfan10Eigene Makelong dann so funktioniert wie von manchen Apis erwartet? Wenn ein Beispiel nötig sein sollte wühle ich...
 
10.10.2006  
 




RGH
Wie anders sollte ein MakeLong funktionieren? In Delphi z.B. funktioniert MakeLong exakt genauso: Zwei Word-Parameter werden zu einem LongInt bzw. LongWord zusammengefügt! (In derTat benutze ich natürlich die MakeLong-Funktion von Delphi für das MakeLong in XProfan.)

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
10.10.2006  
 



Hm Du hast natürlich recht.
 
11.10.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.010 Betrachtungen

Unbenanntvor 0 min.
H.Brill04.08.2023
Sven Bader03.08.2021
Detlef Jagolski21.02.2012

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

iF (4x)
RGH (2x)
Jörg Sellmeyer (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie