/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
GetCommMask() Seriel port programmerings/c~
Fra : Hans Milling


Dato : 08-05-02 11:28

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).

Jeg tror jeg har stirret mig blindt på denne her datastruktur, så hvis
der er nogen der kender svaret vil jeg blive meget glad, eller hvis
nogen har en anden måde. Sagen er at man skal vente til comm porten er
klar til at læse eller skrive, og jeg er kommet frem til at det er
denne funktion som benyttes til dette.
Foresten så ved jeg godt at der er indtil flere eksempler både på
seriel og gps kommunikation, men ingen benytter GetCommEvent, og jeg
har ikke fået det til at virke (enten får jeg timeout eller en masse
volapyk tilbage). Der findes også gratis komponenter på nettet til den
slags, men jeg vil gerne lave det hele selv (det er jo det der er det
sjove, at opfinde den dybe tallerken og derved få fuld forståelse samt
en del AHA oplevelser).

Jeg kan lige nævne jeg benytter Delphi6 hvis det skulle have nogen
betydning.

På forhånd tak...

 
 
R. A. Larsen (08-05-2002)
Kommentar
Fra : R. A. Larsen


Dato : 08-05-02 22:54

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


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste