Page 1 of 1
pb4.30[b4] x86/x64 guid/clsid structure problem
Posted: Mon Nov 24, 2008 11:14 am
by bingo
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
Posted: Mon Nov 24, 2008 1:52 pm
by Fred
You have to use Hex(..., #PB_Long) as the default is now a quad parameter.
Posted: Mon Nov 24, 2008 2:14 pm
by bingo
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
Posted: Mon Nov 24, 2008 2:55 pm
by Fred
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.