[Lazarus] Pointer type handling
Leonardo M. Ramé
l.rame at griensu.com
Mon Dec 9 16:35:33 CET 2013
On 2013-12-09 16:24:22 +0100, Hans-Peter Diettrich wrote:
> Leonardo M. Ramé schrieb:
> >Hi, I'm passing a pointer buffer as void * to a C library that returns
> >Uint8 or Uint16 (and signed types).
> >
> >If I explicitly declare the buffer as PByte, PWord, etc. I get exactly
> >what I need, but, I would like to work with an abstract type (for
> >example Pointer) and cast it depending on a flag returned by the
> >library.
> >
> >If I pass a Pointer (instead of a PWord or PByte) and cast it to PWord,
> >for example. I get the same result if I have passed a PByte.
> >
> >How can I handle a situation like this without explicitly define each
> >type?.
>
> I'm not sure what you mean. How does your code look like now, and
> how do you want it to look?
>
> You can modify the function declarations in your units, to accept
> the properly typed pointer or an Var parameter.
>
> DoDi
>
If you mean overloading functions, that is exactly what I don't want to
do.
My methods are similar to this:
procedure TImageDrawer.Draw(ABuffer: PWord);
begin
...
end;
As you can see, I'm passing a PWord, this works as expected, the same if
I modify the funcion passing a PByte. But, as I cannot create a new
function for each pointer type, I would like to pass a generic pointer,
and typecast it inside the function, for example:
procedure TImageDrawer.Draw(ABuffer: Pointer);
begin
...
if MyImage.DataType = "Uint16" then
data = PWord(ABuffer)^
else
if MyImage.DataType = "Uint8" then
data = PByte(ABuffer)^;
end;
If I do this, the result of PWord(ABuffer) is the same as
PByte(ABuffer). I'm starting to think PByte is equal to Pointer type.
--
Leonardo M. Ramé
http://leonardorame.blogspot.com
More information about the Lazarus
mailing list