Just starting out? Need help? Post your questions and find answers here.
bingo
Enthusiast
Posts: 210 Joined: Fri Apr 02, 2004 12:21 pm
Location: germany/thueringen
Contact:
Post
by bingo » Mon Nov 24, 2008 11:14 am
Code: Select all
Procedure.l Ansi2Uni(ansi.s)
SHStrDup_(@ansi,@memtarget.i)
ProcedureReturn memtarget
EndProcedure
CLSIDFromString_(ansi2uni("{1FFFFFFF-0000-0000-0000-000000000000}"),@pf.guid)
Debug Hex(pf\Data1) ; ok
CLSIDFromString_(ansi2uni("{BFFFFFFF-0000-0000-0000-000000000000}"),@pf.guid)
Debug Hex(pf\Data1) ; ???
ret.i = pf\Data1
Debug Hex(ret)
is
long or not ? :roll:
other test:
Procedure.l Ansi2Uni(ansi.s)
SHStrDup_(@ansi,@memtarget.i)
ProcedureReturn memtarget
EndProcedure
pf.guid
For i=1 To 15
CLSIDFromString_(ansi2uni("{" + Hex(i) + "FFFFFFF-0000-0000-0000-000000000000}"),@pf)
Debug Hex(i) + "FFFFFFF *"
Debug Hex(pf\Data1)
Next
output correct in pb 4.20 only:
1FFFFFFF *
1FFFFFFF
2FFFFFFF *
2FFFFFFF
3FFFFFFF *
3FFFFFFF
4FFFFFFF *
4FFFFFFF
5FFFFFFF *
5FFFFFFF
6FFFFFFF *
6FFFFFFF
7FFFFFFF *
7FFFFFFF
8FFFFFFF *
8FFFFFFF
9FFFFFFF *
9FFFFFFF
AFFFFFFF *
AFFFFFFF
BFFFFFFF *
BFFFFFFF
CFFFFFFF *
CFFFFFFF
DFFFFFFF *
DFFFFFFF
EFFFFFFF *
EFFFFFFF
FFFFFFFF *
FFFFFFFF
["1:0>1"]
Fred
Administrator
Posts: 18253 Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:
Post
by Fred » Mon Nov 24, 2008 1:52 pm
You have to use Hex(..., #PB_Long) as the default is now a quad parameter.
bingo
Enthusiast
Posts: 210 Joined: Fri Apr 02, 2004 12:21 pm
Location: germany/thueringen
Contact:
Post
by bingo » Mon Nov 24, 2008 2:14 pm
Code: Select all
Procedure.l Ansi2Uni(ansi.s)
SHStrDup_(@ansi,@memtarget.i)
ProcedureReturn memtarget
EndProcedure
CLSIDFromString_(ansi2uni("{7FFFFFFF-0000-0000-0000-000000000000}"),@pf.guid)
test1.q = pf\Data1
Debug test1
Debug Hex(test1,#PB_Long)
CLSIDFromString_(ansi2uni("{8FFFFFFF-0000-0000-0000-000000000000}"),@pf)
test2.q = pf\Data1
Debug test2
Debug Hex(test2,#PB_Long)
2147483647
7FFFFFFF
-1879048193
8FFFFFFF
but why this difference ? :roll:
the pf\Data1 of 8FFFFFFF is no long !
FFFFFFFF8FFFFFFF = -1879048193
the pf\Data1 of 7FFFFFFF is ok ...
pb 4.20:
test.l = $7FFFFFFF + 1
qtest.q = test
Debug Hex(qtest) ; = 80000000
pb 4.30b4:
test.l = $7FFFFFFF + 1
qtest.q = test
Debug Hex(qtest) ; = FFFFFFFF80000000
["1:0>1"]
Fred
Administrator
Posts: 18253 Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:
Post
by Fred » Mon Nov 24, 2008 2:55 pm
when the long is negative, it gets extended as negative quad value as well, that's why you get this result. If you want to display unisgned long with Hex(), you have to use #PB_Long.