PDA

Visualizza la versione completa : [C++] Variabile handle


heavy&blues
26-10-2005, 11:16
Ciao ragazzi ho questo problema..
nella documentazione delle dll di un prodotto che s interfaccia alla porta seriale, c'è scritto che per aprire la porta seriale devo usare questa funzione:

BOOL SappSPOpen(
BYTE bPort,
DWORD dwBaudRate,
BYTE bTimeoutConst,
HANDLE* lphPort,
);


Valori passati
bPort Porta seriale da aprire (valori ammessi: min 1 max 16)
dwBaudRate Baudrate da impostare alla porta seriale.
bTimeoutConst Valore di timeout. (valori ammessi: min 0 max 255 raccomandato 3).
lphPort Puntatore ad una variabile di tipo HANDLE che andrà a ricevere l'handle del sistema di comunicazione aperto.


Valori ritornati

La funzione ritorna TRUE se è andato a buon fine, FALSE se si è verificato un errore.
Ora io sto scrivendo il mio programma in c++ e x la Dword ho messo un unsigned long,per il byte un int ma per il parametro lphPort cosa devo mettere??? secondo voi come andrebbe inzializzato?
GRAZIE

heavy&blues
26-10-2005, 12:05
ho dichiarato la varibile come HANDLE * ..ma secondo voi come la dovrei inizializzare?

unomichisiada
26-10-2005, 12:10
Originariamente inviato da heavy&blues
Ciao ragazzi ho questo problema..
nella documentazione delle dll di un prodotto che s interfaccia alla porta seriale, c'è scritto che per aprire la porta seriale devo usare questa funzione:

BOOL SappSPOpen(
BYTE bPort,
DWORD dwBaudRate,
BYTE bTimeoutConst,
HANDLE* lphPort,
);


Valori passati
bPort Porta seriale da aprire (valori ammessi: min 1 max 16)
dwBaudRate Baudrate da impostare alla porta seriale.
bTimeoutConst Valore di timeout. (valori ammessi: min 0 max 255 raccomandato 3).
lphPort Puntatore ad una variabile di tipo HANDLE che andrà a ricevere l'handle del sistema di comunicazione aperto.


Valori ritornati

La funzione ritorna TRUE se è andato a buon fine, FALSE se si è verificato un errore.
Ora io sto scrivendo il mio programma in c++ e x la Dword ho messo un unsigned long,per il byte un int ma per il parametro lphPort cosa devo mettere??? secondo voi come andrebbe inzializzato?
GRAZIE
Da quello che hai scritto mi pare di capire che si tratta di un parametro che funge da valore di ritorno, lo dichiari, lo inizializzi a NULL (o lo lasci senza inizializzare tanto è uguale) e la funzione te lo riempie con l'HANDLE (che di fatto è un identificatore numerico corrispondente ad un intero) della comunicazione aperta così tu lo puoi usare per fare altre cose (tipo usare il canale di comunicazione con altre funzioni). Questi parametri usati come valori di ritorno ovviano al fatto che il valore di ritorno di una funzione è unico, quindi in questo caso si è scelto di ritornare come valore un booleano indicativo del successo dell'operazione ed
il valore di ritorno effettivo con questo stratagemma. Le API di windows fanno largo uso di tale tecnica

heavy&blues
26-10-2005, 12:13
ho provato appunto a metterlo a NULL ma mi esce il tipico errore "invia segnalazione a mirrosoft" e poi questo:
has exited with code -1073741819 (0xC0000005)

unomichisiada
26-10-2005, 12:19
Originariamente inviato da heavy&blues
ho provato appunto a metterlo a NULL ma mi esce il tipico errore "invia segnalazione a mirrosoft" e poi questo:
has exited with code -1073741819 (0xC0000005)
Prova a dichiararlo così


HANDLE por

Ed a passarlo così


&por

Cioè non lo dichiari come puntatore e ne passi l'indirizzo, fammi sapere

heavy&blues
26-10-2005, 12:25
ok grande...cosi non mi da errori!!!
ora io nn sono molto pratico del c++...ma cmq so il c!!!
// Masapr.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "PICTypes.h"
#include "SappExp.h"
#include "stdio.h"
#include "iostream.h"


int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
BOOL ret;
HANDLE * masa=NULL;
BYTE nCom=1;
DWORD dwBaudRate=38499;
BYTE bTimeoutConst=3;
HANDLE lphPort=NULL;
ret=SappSPOpen(nCom,dwBaudRate,bTimeoutConst,&lphPort);
return 1;
}

come faccio a stampare il valore di ret a video???
con il debug vedo il valore...ho provato cn la buon vecchia printf ma nn vedo niente!!!
cmq grazie mille..nn sapevo come uscirne!

unomichisiada
26-10-2005, 12:30
Potesti usare una MessageBox o una setWindowText su un controllo di testo statico. Leggi la MSDN per la doc su queste API

heavy&blues
26-10-2005, 12:38
ok..
ti ringrazio mille..ho provato ad aprire e chiudere la seriale e funzia!!!!!
:) :) :) :) :) :) :ciauz: :ciauz:

unomichisiada
26-10-2005, 18:40
Originariamente inviato da heavy&blues
ok..
ti ringrazio mille..ho provato ad aprire e chiudere la seriale e funzia!!!!!
:) :) :) :) :) :) :ciauz: :ciauz:
Bene! Di niente ciao

Loading