pb4.30[b4] x86/x64 guid/clsid structure problem

Just starting out? Need help? Post your questions and find answers here.
User avatar
bingo
Enthusiast
Enthusiast
Posts: 210
Joined: Fri Apr 02, 2004 12:21 pm
Location: germany/thueringen
Contact:

pb4.30[b4] x86/x64 guid/clsid structure problem

Post 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
["1:0>1"]
Fred
Administrator
Administrator
Posts: 18253
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Post by Fred »

You have to use Hex(..., #PB_Long) as the default is now a quad parameter.
User avatar
bingo
Enthusiast
Enthusiast
Posts: 210
Joined: Fri Apr 02, 2004 12:21 pm
Location: germany/thueringen
Contact:

Post 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
["1:0>1"]
Fred
Administrator
Administrator
Posts: 18253
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Post 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.
Post Reply