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 :oops:

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.