Re: NativeCall pointer question?
On Sun, Nov 20, 2022 at 3:48 AM ToddAndMargo via perl6-users mailto:perl6-users@perl.org>> wrote: Hi All, In one of my native call, I get returned a pointer to a DWORD (uint32). How do I turn that into the actual value in the DWORD? Many thanks, -T On 11/20/22 16:00, Clifton Wood wrote: @ToddAndMargo, Two ways: - Use "my CArray[uint32] $p", use $p as your parameter, and access the value as "$p[0]" or - Use "my Pointer[uint32] $p" and use "$p.deref" My personal preference is the former, as it is the best way to access AND set the actual former value. The latter can only deref. To my knowledge, you cannot set the referenced value of a Pointer type. I do reserve the right to be wrong on this, though. Hi Clifton, I have a pointer $p (from a Windows API call) that points to a spot in memory that is 24 bytes long. # Where do I tell it I want 24 bytes back? my $ca = CArray[uint8].new( 0xFF ** 24 ) $ca = $p.deref; Internal error: unhandled target type Yours in confusion, -T
Re: NativeCall pointer question?
On Sun, Nov 20, 2022 at 3:48 AM ToddAndMargo via perl6-users mailto:perl6-users@perl.org>> wrote: Hi All, In one of my native call, I get returned a pointer to a DWORD (uint32). How do I turn that into the actual value in the DWORD? Many thanks, -T On 11/20/22 16:00, Clifton Wood wrote: @ToddAndMargo, Two ways: - Use "my CArray[uint32] $p", use $p as your parameter, and access the value as "$p[0]" or - Use "my Pointer[uint32] $p" and use "$p.deref" My personal preference is the former, as it is the best way to access AND set the actual former value. The latter can only deref. To my knowledge, you cannot set the referenced value of a Pointer type. I do reserve the right to be wrong on this, though. Thank you! -- ~~ Computers are like air conditioners. They malfunction when you open windows ~~
Re: NativeCall pointer question?
@ToddAndMargo, Two ways: - Use "my CArray[uint32] $p", use $p as your parameter, and access the value as "$p[0]" or - Use "my Pointer[uint32] $p" and use "$p.deref" My personal preference is the former, as it is the best way to access AND set the actual former value. The latter can only deref. To my knowledge, you cannot set the referenced value of a Pointer type. I do reserve the right to be wrong on this, though. On Sun, Nov 20, 2022 at 3:48 AM ToddAndMargo via perl6-users < perl6-users@perl.org> wrote: > Hi All, > > In one of my native call, I get returned a > pointer to a DWORD (uint32). > > How do I turn that into the actual value > in the DWORD? > > Many thanks, > -T >
NativeCall pointer question?
Hi All, In one of my native call, I get returned a pointer to a DWORD (uint32). How do I turn that into the actual value in the DWORD? Many thanks, -T