[fpc-devel] Incompatibilities between win32 windows unit and wince windows unit

Felipe Monteiro de Carvalho felipemonteiro.carvalho at gmail.com
Mon Jan 8 13:32:10 CET 2007

Ok, maybe I´m missing something here. Take a look at this code:

procedure TGDICanvas.DoFillTriangle(const P1, P2, P3: TPoint);
  pts : array[1..3] of windows.TPoint;
  pt: TPoint;
  pt := Transform(P1);
  pts[1].X := pt.X;   pts[1].Y := pt.Y;
  pt := Transform(P2);
  pts[2].X := pt.X;   pts[2].Y := pt.Y;
  pt := Transform(P3);
  pts[3].X := pt.X;   pts[3].Y := pt.Y;

  Windows.Polygon(Handle, pts[1], 3);

Under Win32 it compiles OK, but cross-compiling for wince I get this:

C:\Programas\fpGUI\trunk\gfx\gdi\GFX_GDI.pas(629,33) Error:
Incompatible type for arg no. 2: Got "POINT", expected "LPPOINT"

On the line that calls Windows.Polygon

But I went to rtl/wince/wininc/redef.inc I the only occurence of
Polygon I find is this one:

function Polygon(DC: HDC; var Points; Count: Integer): BOOL; external
'gdi32' name 'Polygon';

Isn´t that wrong?? I thougth wince didn´t have a gdi32 library, but it
was called something else. Plus, the declaration has a var parameter,
so I shouldn´t need the @

Next, I get even more confused because of this code:

procedure TGDIApplication.Run;
  Msg: TMsg;
  DoBreakRun := False;

  while Windows.GetMessage(@Msg, 0, 0, 0) and
   (not (QuitWhenLastWindowCloses and (Forms.Count = 0))) and
   (DoBreakRun = False) do

  DoBreakRun := False;

It compiles and works on both win32 and wince, but Windows.GetMessage
is declared like this:

function GetMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin,
wMsgFilterMax: UINT): BOOL;external 'user32' name 'GetMessageA';

Do I have a wrong idea of the sintax of var parameters??? I never knew
it would accept both with @ and without and produce the same code...

by the way, I am using mode delphi
Felipe Monteiro de Carvalho

More information about the fpc-devel mailing list