nivs1978@hotmail.com (Hans Milling) wrote:
>
> Jeg prøver febrilsk at kommunikere med min seriel port. I mit tilfælde
> en GPS modtager (virker næsten).
> Jeg er dog stødt i et problem, når jeg benytter GetCommMask funktionen
> (slå den evt op i WIN32.HLP filen) så får jeg følgende compiler fejl:
> "[Error] GPS.pas(350): Types of actual and formal parameters must be
> identical"
> Som betyder at mine variabel erklæringen ikke stemmer over ens med den
> måde funktionen er erklæret i windows.dcu filen. Spørgsmålet er så,
> hvordan skal funktionenes 3 parametre så defineres?
> De er som følger i c++ (WinAPI definitionen):
>
> BOOL WaitCommEvent(
> HANDLE hFile, // handle of communications device
> LPDWORD lpEvtMask, // address of variable for event that occurred
> LPOVERLAPPED lpOverlapped, // address of overlapped structure
> );
> HANDLE svare i Delphi til THandle, det fungere fint.
> LPDWORD skulle svare til PDWORD, men det fungere ikke, det er her den
> melder fejl.
> LPOVerlapped svare til en POverlapped (eller en pointer til en
> TOverlapped).
I windows.pas (godt nok i Delphi 5) er den defineret som:
function WaitCommEvent(hFile: THandle; var lpEvtMask: DWORD;
lpOverlapped: POverlapped): BOOL; stdcall;
så det er næsten rigtigt. Du skal altså bruge en DWORD (når der står "var"
i en Delphi/Pascal parameterliste svarer det til når C/C++ bruger pointere for
at kunne returnere resultater).
Der står mange gode ting i kildeteksten til komponenterne :)
MVH, René
--
Using Virtual Access
http://www.vamail.com