[Gambas-user] Answer to: "Way to tell if an object is a struct"

vuott at tutanota.com vuott at tutanota.com
Thu Apr 6 13:23:16 CEST 2023


...Benoit, obviously your question is directed to Brian G.




6 apr 2023, 11:48 da benoit.minisini at gambas-basic.org:

> Le 05/04/2023 à 18:04, vuott--- via User a écrit :
>
>> On this thread
>> https://lists.gambas-basic.org/pipermail/user/2023-March/078862.html <https://lists.gambas-basic.org/pipermail/user/2023-March/078862.html>
>> Brian G asked, if it were possible to know if an Object is a Structure.
>> In Gambas source file
>>     /home/[USER]/gambasdevel/main/share/gambas.h
>> the numbers of datatypes identifiers are listed.
>> Therefore, by knowing which number a declared variable belongs to, it is possible to know its data type.
>> I found a way to know, from the memory address of the variable it is necessary to go back 8 units. Deferencing the Pointer will give the identifier number of the data type of the variable, which consequently will have to be compared with the list above.
>>
>> This is my simply code:
>>
>> [code]
>> Public Struct Struttura
>>    b As Byte
>>    c As Short
>> End Struct
>>
>> Private id As Struct Struttura
>>
>>
>> Public Sub Main()
>>
>> Dim p As Pointer
>>
>> p = VarPtr(id)
>>
>> Print "Gambas datatype identifier: "; Byte@(p - 8)
>>
>> End
>> [/code]
>>
>> It should be noted that in the list of data-type identifier numbers, in particular, the data type Structure is NOT present.
>> It will be located and reported by my code as an "Object" (number: 16)
>>
>
> Of course, don't do that! It might bite you at any time. TypeOf() gives you the datatype of a value.
>
> Why do you need to know if an object reference points at a structure?
>
> -- 
> Benoît Minisini.
>
>
> ----[ http://gambaswiki.org/wiki/doc/netiquette ]----
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20230406/0ebd6815/attachment.htm>


More information about the User mailing list