PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV Mobile 2024 → Utilisation d'API windows erreur paramètre invalide. Convertir une énumration C en langage Windev
Utilisation d'API windows erreur paramètre invalide. Convertir une énumration C en langage Windev
Iniciado por shenzhu, 16,feb. 2011 18:27 - 1 respuesta
Miembro registrado
4 mensajes
Publicado el 16,febrero 2011 - 18:27
Bonjour,

après avoir essayé en vain les différents exemples d'utilisation du GPS, je me suis tourné vers l'API windows permettant de le faire.

Mon idée est d'utiliser la fonction GPSGetPosition pour récupérer les coordonnées GPS. Cette fonction prend comme paramètre
HANDLE hGPSDevice,
GPS_POSITION *pGPSPosition,
DWORD dwMaximumAge,
DWORD dwFlags


Le handle hGPSDevice pouvant être récupéré a partir d'une autre fonction la GPSOpenDevice.
Tout se passe bien avec le GPSOpenDevice, et j'obtiens mon handle.

La structure GPS_Position est définie sur le site de microsoft et j'ai essayé tant bien que mal de la convertir en langage Windev. Et c'est de ce coté que semblent venir les pépins puisque ma tentative d'utiliser la fonction GPSGetPosition me retourne un code d'erreur 87: INVALID PARAMETER.


Voila donc pour commencer les lignes du code dans lequel j'essaie d'obtenir les coordonnées GPS:

gnHGPSDevice=API("gpsapi.dll","GPSOpenDevice",Null,Null,Null,0)

// initialisation de gMaGPSPosition comme demandee dans le mode d'emploi de microsoft

gMaGPSPosition:nSize=Dimension(gMaGPSPosition)
gMaGPSPosition:nVersion=1
Resultat est un entier
Resultat=API("gpsapi.dll","GPSGetPosition",gnHGPSDevice,Null,100,0)

IF Resultat=1 THEN
Info("ERROR_SUCCESS")
ELSE
Info("Error Code:"+Resultat)
END
Info("Latitude="+gMaGPSPosition:Latitude+" ; Longitude=" + gMaGPSPosition:rRlLongitude)


La fonction GPSGetPosition est supposée remplir les champs de la structure GPS_POSITION
J'obtiens a tous les coups "Error Code 87"

J'ai l'impression d'avoir des erreurs au niveau de ma traduction des enumerations
GPS_FIX_QUALITY FixQuality;
GPS_FIX_TYPE FixType;
GPS_FIX_SELECTION SelectionType;

Voila donc la definition du GPS_Position made in Microsoft:

typedef struct _GPS_POSITION {
DWORD dwVersion;
DWORD dwSize;
DWORD dwValidFields;
DWORD dwFlags;
SYSTEMTIME stUTCTime;
double dblLatitude;
double dblLongitude;
float flSpeed;
float flHeading;
double dblMagneticVariation;
float flAltitudeWRTSeaLevel;
float flAltitudeWRTEllipsoid;
GPS_FIX_QUALITY FixQuality;
GPS_FIX_TYPE FixType;
GPS_FIX_SELECTION SelectionType;
float flPositionDilutionOfPrecision;
float flHorizontalDilutionOfPrecision;
float flVerticalDilutionOfPrecision;
DWORD dwSatelliteCount;
DWORD rgdwSatellitesUsedPRNs[GPS_MAX_SATELLITES];
DWORD dwSatellitesInView;
DWORD rgdwSatellitesInViewPRNs[GPS_MAX_SATELLITES];
DWORD rgdwSatellitesInViewElevation[GPS_MAX_SATELLITES];
DWORD rgdwSatellitesInViewAzimuth[GPS_MAX_SATELLITES];
DWORD rgdwSatellitesInViewSignalToNoiseRatio[GPS_MAX_SATELLITES];
} GPS_POSITION, *PGPS_POSITION;



Voila ma traduction en WLangage:

GPS_POSITION est une structure
nVersion est un entier sans signe sur 4 octets
nSize est un entier sans signe sur 4 octets
nValidFields est un entier sans signe sur 4 octets
nFlags est un entier sans signe sur 4 octets
dhUTCTIME est une SYSTEMTIME

Latitude est un réel sur 8 octets
rRlLongitude est un réel sur 8 octets
rRlSpeed est un réel sur 4 octets
rRlHeading est un réel sur 4 octets
rRlMagneticVaraition est un réel sur 8 octets
rRlAltitudeWRTSeaLevel est un réel sur 4 octets
rRlAltitudeEllipsoid est un réel sur 4 octets

nFixQuality est un entier
nFixType est un entier
nSelectionType est un entier

rRlPositionDilutionOfPrecision est un réel sur 4 octets
rRlHzDilutionOfPrecision est un réel sur 4 octets
rRlVerticalDilutionOfPrecision est un réel sur 4 octets

nEnSatelliteCount est un entier sans signe sur 4 octets
tabTblenSatelliteUsedPRNs est un tableau fixe de 1 par 16 entiers sans signe sur 4 octets
nEnSatelliteInView est un entier sans signe sur 4 octets
tabTabenSatelliteInViewPRNs est tableau fixe de 1 par 16 entiers sans signe sur 4 octets
tabTblenSatellitesInViewElevation est un tableau fixe de 1 par 16 entier sans signe sur 4 octets
tabTblenSatellitesInViewAzimuth est un tableau fixe de 1 par 16 entiers sans signe sur 4 octets
tabTableenSatellitesInViewSignalToNoiseRatio est un tableau fixe de 1 par 16 entiers sans signe sur 4 octets

FIN


D'après vous, ou se situe le bug de mon programme et comment le corriger ?

Merci

(PS: Je sais par expérience que sur le forum de Windev, il est malheureusement hyper difficile d'obtenir une reponse... Mais je tente quand meme ma chance en esperant qu'un bon samaritain saura m'indiquer la voie) :)
Miembro registrado
1 mensaje
Publicado el 05,mayo 2011 - 02:55
Bonjour shenzhu,
Je rencontre le même problème que vous en ce qui concerne l'utilisation des fonction GPS pour windows mobile.
Pour l'instant la solution serait de choisir un terminal Android, mais je ne trouve aucun terminal durci Android sur le marché actuellement.
Vus que vous avez posté votre message depuis un petit moment, avez-vous trouvé une solution depuis? Si oui je vous serai très reconnaissant de la partager si vous le voulez bien.

D'avance merci pour votre réponse