Integerwerte bestimmen LONG / DWORD

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Integerwerte bestimmen LONG / DWORD

Beitrag von brandelh »

Hallo,

ich habe laut RMChart einen LONG Parameter als Farbwert (nFirstColorValue (LONG)).
diesen habe ich bei PowerBasic abgeschrieben und wie folgt definiert:

Code: Alles auswählen

// Color constants  -> LONG
#define ColorAliceBlue  0xFFF0F8FF   // %ColorAliceBlue=&HFFF0F8FF
Den Parameter muss ich als L2BIN() übergeben, aber Xbase++ hat den Wert nicht als
LONG sondern intern als DWORD gespeichert und moniert ... (dann ja zurecht) ...
Xbase++ Version : Xbase++ (R) Version 1.90.355
Betriebssystem : Windows XP 05.01 Build 02600 Service Pack 3
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: N VALUE: 4293982463
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Zahlenwert zu groá oder zu klein
oError:filename :
oError:genCode : 10
oError:operation : l2Bin
Da habe ich nun einige Fragen ...

1. Wie bringe ich Xbase++ dazu den Wert als LONG zu interpretieren (also negativ) ?
2. Könnte ich in diesem Fall statt L2BIN(nWert) einfach mit U2BIN(nWert) übergeben oder ändert das intern den Wert der Speicherzelle ?

Notfalls müsste ich alles als dezimal Zahl neu erfassen, aber das möchte ich natürlich vermeiden ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Integerwerte bestimmen LONG / DWORD

Beitrag von brandelh »

Hi,

ich habe mal meine interne Funktion angepasst und es scheint hier zu funktionieren ...
Dies ist eine Funktion, die aus einem eindimensionalen Xbase++ Array (num) ein Array mit LONG Werten macht um es PER REFERENZ an eine API zu übergeben.

Code: Alles auswählen

//---------------------------------------------------------------------
function L2RefStr(uLong)    // Xbase++ Array -> C LONG Array ! PER REFERENZ !
   local cLong := ""
   do case
      case IsNil(uLong)
           cLong := L2BIN(0)
      case valType(uLong)="N"
           if uLong > 2147483647
              cLong := U2BIN(uLong)
           else
              cLong := L2BIN(uLong)
           endif
      case valType(uLong)="A"
           aeval(uLong,{|nL| cLong += iif(nL > 2147483647,U2BIN(nL),L2BIN(nL))})
      otherwise
           msgbox("L2RefStr(uLong) hat falschen Parameter")
   endcase
return cLong
Antworten