IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Transposition de Language C++ vers Windev (SimConnect.dll)


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut Transposition de Language C++ vers Windev (SimConnect.dll)
    Bonjour à tous,

    Je suis actuellement en train d'écrire en Windev un logiciel de connexion à SimConnect pour récupérer et commander un simulateur (MSFX2020).

    Pour ce faire, j'essaie de retrouver des bots de codes écrits en C++ et les transposer en Windev car je n'ai pas trouver d'exemple ou d'explication pour les appels API de SimConnect.dll en Windev.

    J'ai donc un bout de code et je ne comprends pas très bien certains syntaxes.
    Dans le code ci-dessous j'ai notamment 2 lignes qui me posent problème :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    pObjData = (SIMCONNECT_RECV_SIMOBJECT_DATA*)pData;
                    pDataRefs = (DataRefs*)&pObjData->dwData;

    J'ai donc besoin d'information pour savoir ce que fait chaque ligne afin de trouver la syntaxe Windev correspondante.

    Une explication simple me se serait très utile.
    Si vous avez des URL de sites qui traitent de ce sujet ou qui explique en language Windev, ma la manière de faire je serais également très intéressé.

    En vous remerciant d'avance.
    Didier

    Voici la petite routine d'où j'ai extrait ces deux lignes :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    #include <iostream>
    #include <Windows.h>
    #include "SimConnect.h"
    #include <string>
    #include <sstream>
    using namespace std;
     
     
     
     
    HANDLE hSimConnect = NULL;
     
     
     
     
    enum DATA_DEFINE_ID
    {
        DEFINITION_ID_AP,
    };
     
    enum DATA_REQUEST_ID
    {
        REQUEST_AP_SETTINGS,
    };
     
    enum EVENT_ID
    {
        EVENT_SET_AP_ALTITUDE,
    };
     
     
     
    struct DataRefs
    {
        double altitude;
        double knots;
    };
     
    int main() {
     
            HRESULT hr;
            SIMCONNECT_RECV* pData = NULL;
            DWORD cbData = 0;
            bool bRequestProcessed = false;
            int SelectedAltitude = 0;
            SIMCONNECT_RECV_SIMOBJECT_DATA* pObjData = NULL;
            DataRefs* pDataRefs = NULL;
     
            if (SUCCEEDED(SimConnect_Open(&hSimConnect, "Client Event", NULL, NULL, NULL, NULL))) {
                printf("Connected to MSFS2020!\n");
            }
            else {
     
                printf("Failed to Connect to MSFS2020\n");
     
            }
            //simVars
            hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_ID_AP, "PLANE ALTITUDE", "Feet");
     
            // Check simVars
            hr = SimConnect_RequestDataOnSimObject(hSimConnect, REQUEST_AP_SETTINGS, DEFINITION_ID_AP, SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD_ONCE);
            if (FAILED(hr))
            {
                printf("RequestDataOnSimObject for AutopilotData structure - error\n");
            }
            bRequestProcessed = false;
            while (!bRequestProcessed)
            {
                hr = SimConnect_GetNextDispatch(hSimConnect, &pData, &cbData);
                if (SUCCEEDED(hr))
                {
     
                    pObjData = (SIMCONNECT_RECV_SIMOBJECT_DATA*)pData;
                    pDataRefs = (DataRefs*)&pObjData->dwData;
     
                    //This line of code is what im referring to
                    printf("\rCurrent  altitude: %.f feet", pDataRefs->altitude);
     
                }
            }
     
            // Close
            hr = SimConnect_Close(hSimConnect);
     
        return 0;
    }

  2. #2
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 372
    Points : 628
    Points
    628
    Billets dans le blog
    1
    Par défaut
    Je comprends pas trop l'intérêt
    Normalement tu peux mettre directement un code c dans windev

  3. #3
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 810
    Points : 5 269
    Points
    5 269
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Citation Envoyé par popoy Voir le message
    Normalement tu peux mettre directement un code c dans windev
    C'est le C# que l'on peut intégrer dans le WL.

    En ce qui concerne le C++, il faut voir du côté de la doc Borland ou Microsoft en passant par le K&R (Kernighan & Kernighan The C Programming Language, ISBN 2-10-048734-5)
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    Moi ce que j'ai le plus de mal à comprendre c'est que si tu as une dll pourquoi ne pas appeler la dll par AppelDLL32 ?
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Bonjour,

    SIMCONNECT_RECV_SIMOBJECT_DATA
    est une structure

    même chose pour DataRefs

    mais sans voir le code du header correspondant, c'est difficile de vous aider.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Bonjour et merci encore pour vos réponses.

    Pourquoi ne pas intégrer un code C# ? : Ce n'est pas un code autonome que je veux utiliser, il y a des dépendance et celui que j'ai mis n'est qu'une fraction. Je n'ai pas assez de connaissance en C# ou C++ pour me permettre une utilisation complexe. De plus je ne sais pas trop gérer les passages de paramètres avec ces fonctions en C#.

    Pourquoi ne pas appeler une DLL (API) ? : c'est bien ce que je veux faire, mais il me faut la bonne syntaxe de Windev par rapport aux valeurs attendues par la DLL et surtout le format tout en sachant ce que je dois faire. c'est la raison de ma question.

    Ceci dit j'ai une autre solution pour faire ce que je veux faire : utiliser un assemblage .NET dont il m'est possible de l'utiliser comme des classes.
    D'ailleurs cela m'amène a une autre question pour l'assemblage .NET
    Dans cet assemblage j'ai une Classe "Offset" et j'ai l'utilisation de cette classe en C# de cette manière :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    Offset<int> airspeed = new Offset<int>(0x02BC);

    Quelle est la syntaxe Windev correspondante pour cette syntaxe de C# ?

    Merci encore pour votre aide.

  7. #7
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 810
    Points : 5 269
    Points
    5 269
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par didierma34 Voir le message
    Offset<int> airspeed = new Offset<int>(0x02BC);

    Quelle est la syntaxe Windev correspondante pour cette syntaxe de C# ?
    Après avoir intégré ton assemblage dans ton projet, tu peux utilser ses classes comme en Windev (on doit toutefois utiliser des classes dynamiques):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    pclAirspeed est Offset dynamique
     
    pclAirspeed=allouer un Offset(0x02BC)
    Attention toutefois, Offset ressemble à un mot réservé, dans ce cas, ou alors si tu as une autre classe qui utilise ce nom, il faut utiliser explicitement le chemin de la classe en l'encadrant éventuellement par des doubles quotes
    e.g.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    pclAirspeed1 est Chemin.de.la.classe.Offset dynamique
    pclAirspeed2 est "Chemin.de.la.classe".Offset dynamique
    pclAirspeed3 est "Chemin.de.la.classe.Offset" dynamique
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  8. #8
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Ok, je vais essayer cela car j'avais essayé sans les classes dynamiques et j'avais toujours une erreur au moment de déclarer les paramètres.
    Ok également pour le chemin complet de la classe... je regarde également.

    Je fais un retour pour donner le résultat.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    L'instanciation de l'objet en question me donne cette erreur :

    Erreur :Mauvais paramètre pour le constructeur de la classe Offset.
    Il est attendu un paramètre semble-t-il.
    Je me demande si ce n'est pas le "<int>" qu'on trouve dans le code C#


    L'assemblage .NET permet aussi plusieurs variables :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    Offset<short> pause = new Offset<short>(0x0262, true);

    Peut-on mettre le fichier de la DLL pour montrer ?

  10. #10
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 810
    Points : 5 269
    Points
    5 269
    Billets dans le blog
    1
    Par défaut
    int est un entier sur 4 et short un entier sur 2.
    Par défaut, le WL considère 0x02BC comme un entier (sur 4.)
    Il faut définir implicitement le fait que tu passe un entier sur 2 ou sur 4, dans la mesure où il y a un prototype qui utilise un entier sur 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    nParamOffset est entier sur 4
    pclAirspeed est Offset dynamique
     
    nParamOffset=0x02BC //éventuellement 700
    pclAirspeed=allouer un Offset(nParamOffset)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    nParamOffset est entier sur 2
    pclAirspeed est Offset dynamique
     
    nParamOffset=0x02BC //éventuellement 700
    pclAirspeed=allouer un Offset(nParamOffset,Vrai)
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  11. #11
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Merci Voroltinquo (on se croise sur PCSoft également )

    Finalement je me remets sur l'appel API.
    J'ai un peu avancé mais il me faudrait un peu d'aide avec C++ pour la syntaxe sur quelques lignes afin de savoir ce fait le code.

    Pas simple quand on ne connait pas trop C++ et surtout quand on a pas l'habitude.

    Ceci dit, je me connecte, j'envoie la demande, je la reçois, mais je ne l'exploite pas encore.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Mon problème est de savoir comment fonctionnent les Enumérations en C++ par rapport à Windev... Ce n'est pas très clair car il y a des Enum déclarés à partir d'autres variables de SimConnect et je n'y arrive pas trop.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    static enum DATA_DEFINE_ID {
        DEFINITION_1,
    };
     
    static enum DATA_REQUEST_ID {
        REQUEST_1,
    };
    Est-ce que REQUEST_1 est le nom d'une variable ou bien la valeur du variable et laquelle.
    Dans ma demande de data j'utilise ce REQUEST_1 (comme dans les exemple de code) mais je ne sais pas quelle valeur attribuer.
    Et surtout je n'arrive pas à la retrouver.

    De plus il me semble que dans certains cas, pour le résultat, il y a une comparaison bit à bit et il faut que je revois cela avec Windev.
    Bref... je ne suis pas au bout.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Exemple d'énumération

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // ClientData Request Period values
    SIMCONNECT_CLIENT_DATA_PERIOD is enumeration
        SIMCONNECT_CLIENT_DATA_PERIOD_NEVER
        SIMCONNECT_CLIENT_DATA_PERIOD_ONCE
        SIMCONNECT_CLIENT_DATA_PERIOD_VISUAL_FRAME
        SIMCONNECT_CLIENT_DATA_PERIOD_ON_SET
        SIMCONNECT_CLIENT_DATA_PERIOD_SECOND
    end
    Exemple de structure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    structure SIMCONNECT_RECV
        dwSize is unsigned int         // record size
        dwVersion is unsigned int      // interface version
        dwID is unsigned int           // see SIMCONNECT_RECV_ID
    end

  14. #14
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Merci Patrice, c'est ce que j'ai fait, mais n'utilisant jamais une énumération, je me demande toujours quel en est l'intérêt.
    Et si je me pose cette question c'est que je me dit "A quel valeur correspond chaque énumération ?". "Est-ce un entier, une chaine, etc... ?".
    Il faut vraiment que je relise le principe et l'intérêt des énumérations.

    en effet lorsque j'essaie d'adapter ce code :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
                SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE *pObjData = (SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE*)pData;
     
                switch(pObjData->dwRequestID)
                {
                    case REQUEST_1:
                    {
                        DWORD ObjectID = pObjData->dwObjectID;
                        Struct1 *pS = (Struct1*)&pObjData->dwData;
                        if (SUCCEEDED(StringCbLengthA(&pS->title[0], sizeof(pS->title), NULL))) // security check
                        {
                            printf("\nObjectID=%d  Title=\"%s\"\nLat=%f  Lon=%f  Alt=%f  Kohlsman=%.2f", ObjectID, pS->title, pS->latitude, pS->longitude, pS->altitude, pS->kohlsmann );
                        } 
                        break;
                    }
     
                    default:
                       break;
                }
                break;

    On copie la structure dData (gérée par SimConnect) vers pObjData.
    Ensuite on fait un SWITCH (équivalent de SELON QUE en WLangage) mais si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELON pObjData.dwRequestID
    	CAS REQUEST_1 :
    	...		 
    	AUTRE CAS
    FIN
    J'ai de suite une erreur qui me dit , pour REQUEST_1, "Type incompatible".

    Donc, je peux envoyer l'enum REQUEST_1 à l'API, mais en retour je ne peux plus utiliser le REQUEST_1 pour faire cette vérification.

    De plus je viens de voir que j'ai une erreur durant l'appel de l'API : le parametre REQUEST_1 qui est un Enum dans C++, n'est pas un type autorisé lors de l'appel de cet API.
    Donc dans C++ on appelle l'API avec un paramètre de type Enum et dans Wlangage ce n'est pas autorisé !!
    Je me demande donc s'il ne faut pas que ce soit une constante, d'où ma question du début (voir début de mon post)

    Petite précision : dwRequestID est l'ID de retour utilisé par l'appel de l'API SimConnect. Ceci permet donc de vérifier que la réponse correspond bien à la question posée dans l'API (logique).


    Bref ce n'est pas grave je vais m'en sortir.

    Par contre je cherche quand même à comprendre cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Struct1 *pS = (Struct1*)&pObjData->dwData;
    Faut-il comprendre :
    "j'extrait la variable dwData (tableau ou structure , je ne sais pas encore) de la structure ObjData ; pour l'affecter à la variable pS de la Structure Struct1 ?"
    Mais il me reste le "&" : est-ce un opérateur bit par bit ?
    Si c'est le cas, je cherche la syntaxe Windev appropriée.

    Je ne suis pas sortie de l'auberge, mais je ne lâcherai pas car je veux comprendre.

    En tout cas Merci Patrice.

    PS : je vois que tu utilises Windev en anglais C'est peut être plus simple pour comparer avec d'autres langages.µ

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Bonjour,

    Oui, j'utilise WinDev en anglais car je programme dans différents langages, qui ont tous en commun d'utiliser la même syntaxe.
    Par exemple une boucle c'est toujours "FOR" et non pas "POUR", çà facilite le portage d'un code à l'autre.

    Concernant Struct1 *pS = (Struct1*)&pObjData->dwData;
    je traduirai comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pS is sStruct1
    transfer(&pS,  &pobjData.dwData, dimension(pS))
    Concernant les énumérations en C, pour les nombres elle commencent toujours par 0 par défaut
    0,1,2,3,4,5,6,7,8,9,10, etc.

    Je suis entrain de vous traduire le header SimConnect.h en WinDev., mais çà prend du temps...

  16. #16
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Bonjour Patrice,

    Merci pour votre aide, c'est très sympa.

    De mon côté je poursuis mes recherches et j'ai trouvé un Pdf intéressant sur Développez.
    Voici l’URL :

    https://www.developpez.net/forums/at...ndev/wdsdk.pdf

    Je viens de lire ce pdf et sur celui-ci je viens de voir également l'explication des énumération qui ne sont qu'une déclaration de constantes où chaque valeur vaut la précédente + 1.
    Ceci dit une énumération n'a pas le même impact sur un appel d'api. J'ai essayé et j'ai une erreur d'exécution lors de l'appel en utilisant une énumération alors qu'avec une constante ça fonctionne.
    Peut être faut-il utiliser l'adresse de l'énumération au lieu de la valeur elle même. Je vais voir et essayer.

    Encore merci.

    Si j'arrive à faire ce que je veux je partagerai en open source mon code, il pourra être amélioré. Je ne sais pas si on peut utiliser Github avec Windev.jr vais regarder.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Voici la transposition du header C en code WinDev, j'ai fait de mon mieux mais c'est pas parfait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    //-----------------------------------------------------------------------------
    //
    // Copyright (c) Microsoft Corporation. All Rights Reserved.
    //
    //-----------------------------------------------------------------------------
     
    //#ifndef _SIMCONNECT_H_
    //#define _SIMCONNECT_H_
     
    //#pragma once
     
    //#ifdef _MSFS_WASM
    //  #ifndef SIMCONNECT_WASM_MODULE
    //      #define SIMCONNECT_WASM_MODULE "env"
    //  #endif
    //#endif
     
    //#ifndef DWORD_MAX
    //#define DWORD_MAX 0xFFFFFFFF
    //#endif
     
    //#include <float.h>
     
    //typedef DWORD SIMCONNECT_OBJECT_ID;
     
    //----------------------------------------------------------------------------
    //        Constants
    //----------------------------------------------------------------------------
    constant
        DWORD_MAX = 0xFFFFFFFF
        FLT_MAX =          3.402823466e+38F
        SIMCONNECT_UNUSED           = DWORD_MAX;   // special value to indicate unused event, ID
        SIMCONNECT_OBJECT_ID_USER   = 0;           // proxy value for User vehicle ObjectID
     
        SIMCONNECT_CAMERA_IGNORE_FIELD   = FLT_MAX;  //Used to tell the Camera API to NOT modify the value in this part of the argument.
     
        IMCONNECT_CLIENTDATA_MAX_SIZE = 8192;     // maximum value for SimConnect_CreateClientData dwSize parameter
     
     
        // Notification Group priority values
        SIMCONNECT_GROUP_PRIORITY_HIGHEST              =          1;      // highest priority
        SIMCONNECT_GROUP_PRIORITY_HIGHEST_MASKABLE     =   10000000;      // highest priority that allows events to be masked
        SIMCONNECT_GROUP_PRIORITY_STANDARD             = 1900000000;      // standard priority
        SIMCONNECT_GROUP_PRIORITY_DEFAULT              = 2000000000;      // default priority
        SIMCONNECT_GROUP_PRIORITY_LOWEST               = 4000000000;      // priorities lower than this will be ignored
     
        //Weather observations Metar strings
        MAX_METAR_LENGTH = 2000;
     
        // Maximum thermal size is 100 km.
        MAX_THERMAL_SIZE = 100000;
        MAX_THERMAL_RATE = 1000;
     
        // SIMCONNECT_DATA_INITPOSITION.Airspeed
        INITPOSITION_AIRSPEED_CRUISE = -1;       // aircraft's cruise airspeed
        INITPOSITION_AIRSPEED_KEEP = -2;         // keep current airspeed
     
        // AddToClientDataDefinition dwSizeOrType parameter type values
        SIMCONNECT_CLIENTDATATYPE_INT8       = -1;   //  8-bit integer number
        SIMCONNECT_CLIENTDATATYPE_INT16      = -2;   // 16-bit integer number
        SIMCONNECT_CLIENTDATATYPE_INT32      = -3;   // 32-bit integer number
        SIMCONNECT_CLIENTDATATYPE_INT64      = -4;   // 64-bit integer number
        SIMCONNECT_CLIENTDATATYPE_FLOAT32    = -5;   // 32-bit floating-point number (float)
        SIMCONNECT_CLIENTDATATYPE_FLOAT64    = -6;   // 64-bit floating-point number (double)
     
        // AddToClientDataDefinition dwOffset parameter special values
        SIMCONNECT_CLIENTDATAOFFSET_AUTO    = -1;   // automatically compute offset of the ClientData variable
     
        // Open ConfigIndex parameter special value
        SIMCONNECT_OPEN_CONFIGINDEX_LOCAL   = -1;   // ignore SimConnect.cfg settings, and force local connection
     
    //----------------------------------------------------------------------------
    //        Enum definitions
    //----------------------------------------------------------------------------
     
    //these came from substituteMacros
    //#define SIMCONNECT_FIXEDTYPE_DATAV(type, name, count, cliMarshalAs, cliType) type name[1]
     
    // Receive data types
    SIMCONNECT_RECV_ID is enumeration
        SIMCONNECT_RECV_ID_NULL
        SIMCONNECT_RECV_ID_EXCEPTION
        SIMCONNECT_RECV_ID_OPEN
        SIMCONNECT_RECV_ID_QUIT
        SIMCONNECT_RECV_ID_EVENT
        SIMCONNECT_RECV_ID_EVENT_OBJECT_ADDREMOVE
        SIMCONNECT_RECV_ID_EVENT_FILENAME
        SIMCONNECT_RECV_ID_EVENT_FRAME
        SIMCONNECT_RECV_ID_SIMOBJECT_DATA
        SIMCONNECT_RECV_ID_SIMOBJECT_DATA_BYTYPE
        SIMCONNECT_RECV_ID_WEATHER_OBSERVATION
        SIMCONNECT_RECV_ID_CLOUD_STATE
        SIMCONNECT_RECV_ID_ASSIGNED_OBJECT_ID
        SIMCONNECT_RECV_ID_RESERVED_KEY
        SIMCONNECT_RECV_ID_CUSTOM_ACTION
        SIMCONNECT_RECV_ID_SYSTEM_STATE
        SIMCONNECT_RECV_ID_CLIENT_DATA
        SIMCONNECT_RECV_ID_EVENT_WEATHER_MODE
        SIMCONNECT_RECV_ID_AIRPORT_LIST
        SIMCONNECT_RECV_ID_VOR_LIST
        SIMCONNECT_RECV_ID_NDB_LIST
        SIMCONNECT_RECV_ID_WAYPOINT_LIST
        SIMCONNECT_RECV_ID_EVENT_MULTIPLAYER_SERVER_STARTED
        SIMCONNECT_RECV_ID_EVENT_MULTIPLAYER_CLIENT_STARTED
        SIMCONNECT_RECV_ID_EVENT_MULTIPLAYER_SESSION_ENDED
        SIMCONNECT_RECV_ID_EVENT_RACE_END
        SIMCONNECT_RECV_ID_EVENT_RACE_LAP
    end
     
    // Data data types
    SIMCONNECT_DATATYPE is enumeration
        SIMCONNECT_DATATYPE_INVALID        // invalid data type
        SIMCONNECT_DATATYPE_INT32          // 32-bit integer number
        SIMCONNECT_DATATYPE_INT64          // 64-bit integer number
        SIMCONNECT_DATATYPE_FLOAT32        // 32-bit floating-point number (float)
        SIMCONNECT_DATATYPE_FLOAT64        // 64-bit floating-point number (double)
        SIMCONNECT_DATATYPE_STRING8        // 8-byte string
        SIMCONNECT_DATATYPE_STRING32       // 32-byte string
        SIMCONNECT_DATATYPE_STRING64       // 64-byte string
        SIMCONNECT_DATATYPE_STRING128      // 128-byte string
        SIMCONNECT_DATATYPE_STRING256      // 256-byte string
        SIMCONNECT_DATATYPE_STRING260      // 260-byte string
        SIMCONNECT_DATATYPE_STRINGV        // variable-length string
     
        SIMCONNECT_DATATYPE_INITPOSITION   // see SIMCONNECT_DATA_INITPOSITION
        SIMCONNECT_DATATYPE_MARKERSTATE    // see SIMCONNECT_DATA_MARKERSTATE
        SIMCONNECT_DATATYPE_WAYPOINT       // see SIMCONNECT_DATA_WAYPOINT
        SIMCONNECT_DATATYPE_LATLONALT      // see SIMCONNECT_DATA_LATLONALT
        SIMCONNECT_DATATYPE_XYZ            // see SIMCONNECT_DATA_XYZ
     
        SIMCONNECT_DATATYPE_MAX            // enum limit
    end
     
    // Exception error types
    SIMCONNECT_EXCEPTION is enumeration
        SIMCONNECT_EXCEPTION_NONE
     
        SIMCONNECT_EXCEPTION_ERROR
        SIMCONNECT_EXCEPTION_SIZE_MISMATCH
        SIMCONNECT_EXCEPTION_UNRECOGNIZED_ID
        SIMCONNECT_EXCEPTION_UNOPENED
        SIMCONNECT_EXCEPTION_VERSION_MISMATCH
        SIMCONNECT_EXCEPTION_TOO_MANY_GROUPS
        SIMCONNECT_EXCEPTION_NAME_UNRECOGNIZED
        SIMCONNECT_EXCEPTION_TOO_MANY_EVENT_NAMES
        SIMCONNECT_EXCEPTION_EVENT_ID_DUPLICATE
        SIMCONNECT_EXCEPTION_TOO_MANY_MAPS
        SIMCONNECT_EXCEPTION_TOO_MANY_OBJECTS
        SIMCONNECT_EXCEPTION_TOO_MANY_REQUESTS
        SIMCONNECT_EXCEPTION_WEATHER_INVALID_PORT
        SIMCONNECT_EXCEPTION_WEATHER_INVALID_METAR
        SIMCONNECT_EXCEPTION_WEATHER_UNABLE_TO_GET_OBSERVATION
        SIMCONNECT_EXCEPTION_WEATHER_UNABLE_TO_CREATE_STATION
        SIMCONNECT_EXCEPTION_WEATHER_UNABLE_TO_REMOVE_STATION
        SIMCONNECT_EXCEPTION_INVALID_DATA_TYPE
        SIMCONNECT_EXCEPTION_INVALID_DATA_SIZE
        SIMCONNECT_EXCEPTION_DATA_ERROR
        SIMCONNECT_EXCEPTION_INVALID_ARRAY
        SIMCONNECT_EXCEPTION_CREATE_OBJECT_FAILED
        SIMCONNECT_EXCEPTION_LOAD_FLIGHTPLAN_FAILED
        SIMCONNECT_EXCEPTION_OPERATION_INVALID_FOR_OBJECT_TYPE
        SIMCONNECT_EXCEPTION_ILLEGAL_OPERATION
        SIMCONNECT_EXCEPTION_ALREADY_SUBSCRIBED
        SIMCONNECT_EXCEPTION_INVALID_ENUM
        SIMCONNECT_EXCEPTION_DEFINITION_ERROR
        SIMCONNECT_EXCEPTION_DUPLICATE_ID
        SIMCONNECT_EXCEPTION_DATUM_ID
        SIMCONNECT_EXCEPTION_OUT_OF_BOUNDS
        SIMCONNECT_EXCEPTION_ALREADY_CREATED
        SIMCONNECT_EXCEPTION_OBJECT_OUTSIDE_REALITY_BUBBLE
        SIMCONNECT_EXCEPTION_OBJECT_CONTAINER
        SIMCONNECT_EXCEPTION_OBJECT_AI
        SIMCONNECT_EXCEPTION_OBJECT_ATC
        SIMCONNECT_EXCEPTION_OBJECT_SCHEDULE
    end
     
    // Object types
    SIMCONNECT_SIMOBJECT_TYPE is enumeration
        SIMCONNECT_SIMOBJECT_TYPE_USER
        SIMCONNECT_SIMOBJECT_TYPE_ALL
        SIMCONNECT_SIMOBJECT_TYPE_AIRCRAFT
        SIMCONNECT_SIMOBJECT_TYPE_HELICOPTER
        SIMCONNECT_SIMOBJECT_TYPE_BOAT
        SIMCONNECT_SIMOBJECT_TYPE_GROUND
    end
     
    // EventState values
    SIMCONNECT_STATE is enumeration
        SIMCONNECT_STATE_OFF
        SIMCONNECT_STATE_ON
    end
     
    // Object Data Request Period values
    SIMCONNECT_PERIOD is enumeration
        SIMCONNECT_PERIOD_NEVER
        SIMCONNECT_PERIOD_ONCE
        SIMCONNECT_PERIOD_VISUAL_FRAME
        SIMCONNECT_PERIOD_SIM_FRAME
        SIMCONNECT_PERIOD_SECOND
    end
     
     
    SIMCONNECT_MISSION_END is enumeration
        SIMCONNECT_MISSION_FAILED
        SIMCONNECT_MISSION_CRASHED
        SIMCONNECT_MISSION_SUCCEEDED
    end
     
    // ClientData Request Period values
    SIMCONNECT_CLIENT_DATA_PERIOD is enumeration
        SIMCONNECT_CLIENT_DATA_PERIOD_NEVER
        SIMCONNECT_CLIENT_DATA_PERIOD_ONCE
        SIMCONNECT_CLIENT_DATA_PERIOD_VISUAL_FRAME
        SIMCONNECT_CLIENT_DATA_PERIOD_ON_SET
        SIMCONNECT_CLIENT_DATA_PERIOD_SECOND
    end
     
    SIMCONNECT_TEXT_TYPE is enumeration
        SIMCONNECT_TEXT_TYPE_SCROLL_BLACK
        SIMCONNECT_TEXT_TYPE_SCROLL_WHITE
        SIMCONNECT_TEXT_TYPE_SCROLL_RED
        SIMCONNECT_TEXT_TYPE_SCROLL_GREEN
        SIMCONNECT_TEXT_TYPE_SCROLL_BLUE
        SIMCONNECT_TEXT_TYPE_SCROLL_YELLOW
        SIMCONNECT_TEXT_TYPE_SCROLL_MAGENTA
        SIMCONNECT_TEXT_TYPE_SCROLL_CYAN
        SIMCONNECT_TEXT_TYPE_PRINT_BLACK=0x0100
        SIMCONNECT_TEXT_TYPE_PRINT_WHITE
        SIMCONNECT_TEXT_TYPE_PRINT_RED
        SIMCONNECT_TEXT_TYPE_PRINT_GREEN
        SIMCONNECT_TEXT_TYPE_PRINT_BLUE
        SIMCONNECT_TEXT_TYPE_PRINT_YELLOW
        SIMCONNECT_TEXT_TYPE_PRINT_MAGENTA
        SIMCONNECT_TEXT_TYPE_PRINT_CYAN
        SIMCONNECT_TEXT_TYPE_MENU=0x0200
    end
     
    SIMCONNECT_TEXT_RESULT is enumeration
        SIMCONNECT_TEXT_RESULT_MENU_SELECT_1
        SIMCONNECT_TEXT_RESULT_MENU_SELECT_2
        SIMCONNECT_TEXT_RESULT_MENU_SELECT_3
        SIMCONNECT_TEXT_RESULT_MENU_SELECT_4
        SIMCONNECT_TEXT_RESULT_MENU_SELECT_5
        SIMCONNECT_TEXT_RESULT_MENU_SELECT_6
        SIMCONNECT_TEXT_RESULT_MENU_SELECT_7
        SIMCONNECT_TEXT_RESULT_MENU_SELECT_8
        SIMCONNECT_TEXT_RESULT_MENU_SELECT_9
        SIMCONNECT_TEXT_RESULT_MENU_SELECT_10
        SIMCONNECT_TEXT_RESULT_DISPLAYED = 0x00010000
        SIMCONNECT_TEXT_RESULT_QUEUED
        SIMCONNECT_TEXT_RESULT_REMOVED
        SIMCONNECT_TEXT_RESULT_REPLACED
        SIMCONNECT_TEXT_RESULT_TIMEOUT
    end
     
    SIMCONNECT_WEATHER_MODE is enumeration
        SIMCONNECT_WEATHER_MODE_THEME
        SIMCONNECT_WEATHER_MODE_RWW
        SIMCONNECT_WEATHER_MODE_CUSTOM
        SIMCONNECT_WEATHER_MODE_GLOBAL
    end
     
    SIMCONNECT_FACILITY_LIST_TYPE is enumeration
        SIMCONNECT_FACILITY_LIST_TYPE_AIRPORT
        SIMCONNECT_FACILITY_LIST_TYPE_WAYPOINT
        SIMCONNECT_FACILITY_LIST_TYPE_NDB
        SIMCONNECT_FACILITY_LIST_TYPE_VOR
        SIMCONNECT_FACILITY_LIST_TYPE_COUNT // invalid
    end
     
     
    //SIMCONNECT_VOR_FLAGS;            // flags for SIMCONNECT_RECV_ID_VOR_LIST
    constant
        SIMCONNECT_RECV_ID_VOR_LIST_HAS_NAV_SIGNAL  = 0x00000001;   // Has Nav signal
        SIMCONNECT_RECV_ID_VOR_LIST_HAS_LOCALIZER   = 0x00000002;   // Has localizer
        SIMCONNECT_RECV_ID_VOR_LIST_HAS_GLIDE_SLOPE = 0x00000004;   // Has Nav signal
        SIMCONNECT_RECV_ID_VOR_LIST_HAS_DME         = 0x00000008;   // Station has DME
     
    // bits for the Waypoint Flags field: may be combined
    //SIMCONNECT_WAYPOINT_FLAGS;
        SIMCONNECT_WAYPOINT_NONE                    = 0x00;
        SIMCONNECT_WAYPOINT_SPEED_REQUESTED         = 0x04;    // requested speed at waypoint is valid
        SIMCONNECT_WAYPOINT_THROTTLE_REQUESTED      = 0x08;    // request a specific throttle percentage
        SIMCONNECT_WAYPOINT_COMPUTE_VERTICAL_SPEED  = 0x10;    // compute vertical to speed to reach waypoint altitude when crossing the waypoint
        SIMCONNECT_WAYPOINT_ALTITUDE_IS_AGL         = 0x20;    // AltitudeIsAGL
        SIMCONNECT_WAYPOINT_ON_GROUND               = 0x00100000;   // place this waypoint on the ground
        SIMCONNECT_WAYPOINT_REVERSE                 = 0x00200000;   // Back up to this waypoint. Only valid on first waypoint
        SIMCONNECT_WAYPOINT_WRAP_TO_FIRST           = 0x00400000;   // Wrap around back to first waypoint. Only valid on last waypoint.
     
    //SIMCONNECT_EVENT_FLAG;
        SIMCONNECT_EVENT_FLAG_DEFAULT               = 0x00000000;
        SIMCONNECT_EVENT_FLAG_FAST_REPEAT_TIMER     = 0x00000001;      // set event repeat timer to simulate fast repeat
        SIMCONNECT_EVENT_FLAG_SLOW_REPEAT_TIMER     = 0x00000002;      // set event repeat timer to simulate slow repeat
        SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY   = 0x00000010;      // interpret GroupID parameter as priority value
     
    //SIMCONNECT_DATA_REQUEST_FLAG;
        SIMCONNECT_DATA_REQUEST_FLAG_DEFAULT        = 0x00000000;
        SIMCONNECT_DATA_REQUEST_FLAG_CHANGED        = 0x00000001;      // send requested data when value(s) change
        SIMCONNECT_DATA_REQUEST_FLAG_TAGGED         = 0x00000002;      // send requested data in tagged format
     
    //SIMCONNECT_DATA_SET_FLAG;
        SIMCONNECT_DATA_SET_FLAG_DEFAULT            = 0x00000000;
        SIMCONNECT_DATA_SET_FLAG_TAGGED             = 0x00000001;      // data is in tagged format
     
    //SIMCONNECT_CREATE_CLIENT_DATA_FLAG;
        SIMCONNECT_CREATE_CLIENT_DATA_FLAG_DEFAULT     = 0x00000000;
        SIMCONNECT_CREATE_CLIENT_DATA_FLAG_READ_ONLY   = 0x00000001;      // permit only ClientData creator to write into ClientData
     
     
    //SIMCONNECT_CLIENT_DATA_REQUEST_FLAG;
        SIMCONNECT_CLIENT_DATA_REQUEST_FLAG_DEFAULT    = 0x00000000;
        SIMCONNECT_CLIENT_DATA_REQUEST_FLAG_CHANGED    = 0x00000001;      // send requested ClientData when value(s) change
        SIMCONNECT_CLIENT_DATA_REQUEST_FLAG_TAGGED     = 0x00000002;      // send requested ClientData in tagged format
     
    //SIMCONNECT_CLIENT_DATA_SET_FLAG;
        SIMCONNECT_CLIENT_DATA_SET_FLAG_DEFAULT        = 0x00000000;
        SIMCONNECT_CLIENT_DATA_SET_FLAG_TAGGED         = 0x00000001;      // data is in tagged format
     
     
    //SIMCONNECT_VIEW_SYSTEM_EVENT_DATA;                // dwData contains these flags for the "View" System Event
        SIMCONNECT_VIEW_SYSTEM_EVENT_DATA_COCKPIT_2D      = 0x00000001;      // 2D Panels in cockpit view
        SIMCONNECT_VIEW_SYSTEM_EVENT_DATA_COCKPIT_VIRTUAL = 0x00000002;      // Virtual (3D) panels in cockpit view
        SIMCONNECT_VIEW_SYSTEM_EVENT_DATA_ORTHOGONAL      = 0x00000004;      // Orthogonal (Map) view
     
    //SIMCONNECT_SOUND_SYSTEM_EVENT_DATA;            // dwData contains these flags for the "Sound" System Event
        SIMCONNECT_SOUND_SYSTEM_EVENT_DATA_MASTER    = 0x00000001;      // Sound Master
     
    end
     
     
    //----------------------------------------------------------------------------
    //        User-defined enums
    //----------------------------------------------------------------------------
     
    //SIMCONNECT_NOTIFICATION_GROUP_ID;     //client-defined notification group ID
    //SIMCONNECT_INPUT_GROUP_ID;            //client-defined input group ID
    //SIMCONNECT_DATA_DEFINITION_ID;        //client-defined data definition ID
    //SIMCONNECT_DATA_REQUEST_ID;           //client-defined request data ID
     
    //SIMCONNECT_CLIENT_EVENT_ID;           //client-defined client event ID
    //SIMCONNECT_CLIENT_DATA_ID;            //client-defined client data ID
    //SIMCONNECT_CLIENT_DATA_DEFINITION_ID; //client-defined client data definition ID
     
     
    //----------------------------------------------------------------------------
    //        Struct definitions
    //----------------------------------------------------------------------------
     
    #pragma pack(push, 1)
     
    SIMCONNECT_RECV is structure
        dwSize is unsigned int;         // record size
        dwVersion is unsigned int;      // interface version
        dwID is unsigned int;           // see SIMCONNECT_RECV_ID
    end
     
    SIMCONNECT_RECV_EXCEPTION is structure// : public SIMCONNECT_RECV   // when dwID == SIMCONNECT_RECV_ID_EXCEPTION
        DWORD   dwException;    // see SIMCONNECT_EXCEPTION
        static const DWORD UNKNOWN_SENDID = 0;
        DWORD   dwSendID;       // see SimConnect_GetLastSentPacketID
        static const DWORD UNKNOWN_INDEX = DWORD_MAX;
        DWORD   dwIndex;        // index of parameter that was source of error
    end
     
    SIMCONNECT_RECV_OPEN is structure // : public SIMCONNECT_RECV   // when dwID == SIMCONNECT_RECV_ID_OPEN
        szApplicationName is string asciiz on 256
        dwApplicationVersionMajor is unsigned int;
        dwApplicationVersionMinor is unsigned int;
        dwApplicationBuildMajor is unsigned int;
        dwApplicationBuildMinor is unsigned int;
        dwSimConnectVersionMajor is unsigned int;
        dwSimConnectVersionMinor is unsigned int;
        dwSimConnectBuildMajor is unsigned int;
        dwSimConnectBuildMinor is unsigned int;
        dwReserved1 is unsigned int;
        dwReserved2 is unsigned int;
    end
     
    SIMCONNECT_RECV_QUIT is structure // : public SIMCONNECT_RECV   // when dwID == SIMCONNECT_RECV_ID_QUIT
    end
     
    SIMCONNECT_RECV_EVENT is structure // : public SIMCONNECT_RECV       // when dwID == SIMCONNECT_RECV_ID_EVENT
        UNKNOWN_GROUP is unsigned int = 0xFFFFFFFF // DWORD_MAX;
        uGroupID is unsigned int;
        uEventID is unsigned int;
        dwData is unsigned int;       // uEventID-dependent context
    end
     
    SIMCONNECT_RECV_EVENT_FILENAME is structure // : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_FILENAME
        szFileName is string asciiz on 260 // MAX_PATH);   // uEventID-dependent context
        dwFlags is unsigned int;
    end
     
    SIMCONNECT_RECV_EVENT_OBJECT_ADDREMOVE is structure // : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_FILENAME
        eObjType is SIMCONNECT_SIMOBJECT_TYPE;
    end
     
    SIMCONNECT_RECV_EVENT_FRAME is structure // : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_FRAME
        fFrameRate is 4-byte real;
        fSimSpeed is 4-byte real;
    end
     
    // SIMCONNECT_DATA_RACE_RESULT
    SIMCONNECT_DATA_RACE_RESULT is structure
        dwNumberOfRacers is unsigned int;                // The total number of racers
        MissionGUID is UUID;                             // The name of the mission to execute, NULL if no mission
        szPlayerName is string asciiz on MAX_PATH;       // The name of the player
        szSessionType is string asciiz on MAX_PATH;      // The type of the multiplayer session: "LAN", "GAMESPY")
        szAircraft is string asciiz on MAX_PATH;         // The aircraft type
        szPlayerRole is string asciiz on MAX_PATH;       // The player role in the mission
        fTotalTime is real;                              // Total time in seconds, 0 means DNF
        fPenaltyTime is real;                            // Total penalty time in seconds
        dwIsDisqualified is unsigned int;                // non 0 - disqualified, 0 - not disqualified
    end
     
    SIMCONNECT_RECV_EVENT_RACE_END is structure // : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_RACE_END
        dwRacerNumber is unsigned int;                            // The index of the racer the results are for
        RacerData is SIMCONNECT_DATA_RACE_RESULT;
    end
     
    SIMCONNECT_RECV_EVENT_RACE_LAP is structure // : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_RACE_LAP
        dwLapIndex is unsigned int;                               // The index of the lap the results are for
        RacerData is SIMCONNECT_DATA_RACE_RESULT;
    end
     
    structure SIMCONNECT_RECV_SIMOBJECT_DATA// : public SIMCONNECT_RECV           // when dwID == SIMCONNECT_RECV_ID_SIMOBJECT_DATA
        dwRequestID is unsigned int;
        dwObjectID is unsigned int;
        dwDefineID is unsigned int;
        dwFlags is unsigned int;            // SIMCONNECT_DATA_REQUEST_FLAG
        dwentrynumber is unsigned int;      // if multiple objects returned, this is number <entrynumber> out of <outof>.
        dwoutof is unsigned int;            // note: starts with 1, not 0.
        dwDefineCount is unsigned int;      // data count (number of datums, *not* byte count)
        dwData is unsigned int;             // data begins here, dwDefineCount data items
        dwID is unsigned int;
    end
     
    SIMCONNECT_RECV_WEATHER_OBSERVATION is structure // : public SIMCONNECT_RECV // when dwID == SIMCONNECT_RECV_ID_WEATHER_OBSERVATION
        dwRequestID is unigned int;
        szMetar is string asciiz on MAX_METAR_LENGTH;      // Variable length string whose maximum size is MAX_METAR_LENGTH
    end
     
    constant
        SIMCONNECT_CLOUD_STATE_ARRAY_WIDTH = 64;
        IMCONNECT_CLOUD_STATE_ARRAY_SIZE = SIMCONNECT_CLOUD_STATE_ARRAY_WIDTH*SIMCONNECT_CLOUD_STATE_ARRAY_WIDTH;
    end
     
    SIMCONNECT_RECV_CLOUD_STATE is structure // : public SIMCONNECT_RECV // when dwID == SIMCONNECT_RECV_ID_CLOUD_STATE
        dwRequestID is unsigned int;
        dwArraySize is unsigned int;
        SIMCONNECT_FIXEDTYPE_DATAV(BYTE,    rgbData, dwArraySize, U1 /*member of UnmanagedType enum*/ , System::Byte /*cli type*/);
    end
     
    SIMCONNECT_RECV_ASSIGNED_OBJECT_ID is structure// : public SIMCONNECT_RECV // when dwID == SIMCONNECT_RECV_ID_ASSIGNED_OBJECT_ID
        dwRequestID is unsigned int;
        dwObjectID is unsigned int;
    end
     
    SIMCONNECT_RECV_RESERVED_KEY is structure // : public SIMCONNECT_RECV // when dwID == SIMCONNECT_RECV_ID_RESERVED_KEY
        szChoiceReserved is string asciiz on 30;
        szReservedKey is string asciiz on 50;
    end
     
    SIMCONNECT_RECV_SYSTEM_STATE is structure // : public SIMCONNECT_RECV // when dwID == SIMCONNECT_RECV_ID_SYSTEM_STATE
        dwRequestID is unsigned int;
        dwInteger is unsigned int;
        fFloat is 4-byte real;
        szString is string asciiz on MAX_PATH;
    end
     
    SIMCONNECT_RECV_CUSTOM_ACTION is structure // : public SIMCONNECT_RECV_EVENT
        guidInstanceId is UUID;                // Instance id of the action that executed
        dwWaitForCompletion is unsigned int;   // Wait for completion flag on the action
        szPayLoad is string asciiz on 1;       // Variable length string payload associated with the mission action.
    end
     
    // SIMCONNECT_RECV_FACILITIES_LIST
    SIMCONNECT_RECV_FACILITIES_LIST is structure // : public SIMCONNECT_RECV
        dwRequestID is unsigned int;
        dwArraySize is unsigned int;
        dwEntryNumber is unsigned int;  // when the array of items is too big for one send, which send this is (0..dwOutOf-1)
        dwOutOf is unsigned int;        // total number of transmissions the list is chopped into
    end
     
    // SIMCONNECT_DATA_FACILITY_AIRPORT
    SIMCONNECT_DATA_FACILITY_AIRPORT is structure
        Icao is string asciiz on 9;     // ICAO of the object
        Latitude is real;               // degrees
        Longitude is real;              // degrees
        Altitude is real;               // meters
    end
     
    // SIMCONNECT_RECV_AIRPORT_LIST
    SIMCONNECT_RECV_AIRPORT_LIST is structure // : public SIMCONNECT_RECV_FACILITIES_LIST
        SIMCONNECT_FIXEDTYPE_DATAV(SIMCONNECT_DATA_FACILITY_AIRPORT, rgData, dwArraySize, U1 /*member of UnmanagedType enum*/, SIMCONNECT_DATA_FACILITY_AIRPORT /*cli type*/);
    end
     
     
    // SIMCONNECT_DATA_FACILITY_WAYPOINT
    SIMCONNECT_DATA_FACILITY_WAYPOINT is structure// : public SIMCONNECT_DATA_FACILITY_AIRPORT
        fMagVar is 4-byte real;                // Magvar in degrees
    end
     
    // SIMCONNECT_RECV_WAYPOINT_LIST
    SIMCONNECT_RECV_WAYPOINT_LIST is structure // : public SIMCONNECT_RECV_FACILITIES_LIST
        SIMCONNECT_FIXEDTYPE_DATAV(SIMCONNECT_DATA_FACILITY_WAYPOINT, rgData, dwArraySize, U1 /*member of UnmanagedType enum*/, SIMCONNECT_DATA_FACILITY_WAYPOINT /*cli type*/);
    end
     
    // SIMCONNECT_DATA_FACILITY_NDB
    SIMCONNECT_DATA_FACILITY_NDB is structure // : public SIMCONNECT_DATA_FACILITY_WAYPOINT
        fFrequency is unsigned int;             // frequency in Hz
    end
     
    // SIMCONNECT_RECV_NDB_LIST
    SIMCONNECT_RECV_NDB_LIST is structure // : public SIMCONNECT_RECV_FACILITIES_LIST
        SIMCONNECT_FIXEDTYPE_DATAV(SIMCONNECT_DATA_FACILITY_NDB, rgData, dwArraySize, U1 /*member of UnmanagedType enum*/, SIMCONNECT_DATA_FACILITY_NDB /*cli type*/);
    end
     
    // SIMCONNECT_DATA_FACILITY_VOR
    SIMCONNECT_DATA_FACILITY_VOR is structure // : public SIMCONNECT_DATA_FACILITY_NDB
        Flags is unsigned int;                  // SIMCONNECT_VOR_FLAGS
        fLocalizer is 4-byte real;             // Localizer in degrees
        GlideLat is real;               // Glide Slope Location (deg, deg, meters)
        GlideLon is real;
        GlideAlt is real;
        fGlideSlopeAngle is 4-byte real;       // Glide Slope in degrees
    end
     
    // SIMCONNECT_RECV_VOR_LIST
    SIMCONNECT_RECV_VOR_LIST is structure // : public SIMCONNECT_RECV_FACILITIES_LIST
        SIMCONNECT_FIXEDTYPE_DATAV(SIMCONNECT_DATA_FACILITY_VOR, rgData, dwArraySize, U1 /*member of UnmanagedType enum*/, SIMCONNECT_DATA_FACILITY_VOR /*cli type*/);
    end
     
    // SIMCONNECT_DATATYPE_INITPOSITION
    SIMCONNECT_DATA_INITPOSITION is structure
        Latitude is real;   // degrees
        Longitude is real;  // degrees
        Altitude is real;   // feet
        Pitch is real;      // degrees
        Bank is real;       // degrees
        Heading is real;    // degrees
        OnGround is unsigned int;   // 1=force to be on the ground
        Airspeed is unsigned int;   // knots
    end
     
    // SIMCONNECT_DATATYPE_MARKERSTATE
    SIMCONNECT_DATA_MARKERSTATE is structure
        szMarkerName is string asciiz on 64;
        dwMarkerState is unsigned int;
    end
     
    // SIMCONNECT_DATATYPE_WAYPOINT
    SIMCONNECT_DATA_WAYPOINT is structure
        Latitude is real;   // degrees
        Longitude is real;  // degrees
        Altitude is real;   // feet
        Flags is unsigned int;
        ktsSpeed is real;   // knots
        percentThrottle is real;
    end
     
    // SIMCONNECT_DATA_LATLONALT
    SIMCONNECT_DATA_LATLONALT is structure
        Latitude real;
        Longitude real;
        Altitude real;
    end
     
    // SIMCONNECT_DATA_XYZ
    SIMCONNECT_DATA_XYZ is structure
        x real;
        y real;
        z real;
    end
     
    //----------------------------------------------------------------------------
    //        End of Struct definitions
    //----------------------------------------------------------------------------
     
    //typedef void (CALLBACK *DispatchProc)(SIMCONNECT_RECV* pData, DWORD cbData, void* pContext);
     
    //#if !defined(SIMCONNECTAPI)
    //  #ifdef _MSFS_WASM
    //      #ifdef __INTELLISENSE__
    //          #define MODULE_EXPORT
    //          #define SIMCONNECTAPI extern "C" HRESULT
    //      #else
    //          #define MODULE_EXPORT __attribute__( ( visibility( "default" ) ) )
    //          #define SIMCONNECTAPI extern "C" __attribute__((import_module(SIMCONNECT_WASM_MODULE))) HRESULT
    //      #endif
    //  #else
    //      #define MODULE_EXPORT
    //      #define SIMCONNECTAPI extern "C" HRESULT __stdcall
    //  #endif
    //#endif
     
    // List of exported functions for the SimmConnect API
    //int SimConnect_MapClientEventToSimEvent(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID, const char * EventName = "");
    //int SimConnect_TransmitClientEvent(HANDLE hSimConnect, SIMCONNECT_OBJECT_ID ObjectID, SIMCONNECT_CLIENT_EVENT_ID EventID, DWORD dwData, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, SIMCONNECT_EVENT_FLAG Flags);
    //int SimConnect_SetSystemEventState(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID, SIMCONNECT_STATE dwState);
    //int SimConnect_AddClientEventToNotificationGroup(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, SIMCONNECT_CLIENT_EVENT_ID EventID, BOOL bMaskable = FALSE);
    //int SimConnect_RemoveClientEvent(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, SIMCONNECT_CLIENT_EVENT_ID EventID);
    //int SimConnect_SetNotificationGroupPriority(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, DWORD uPriority);
    //int SimConnect_ClearNotificationGroup(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID);
    //int SimConnect_RequestNotificationGroup(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, DWORD dwReserved = 0, DWORD Flags = 0);
    //int SimConnect_AddToDataDefinition(HANDLE hSimConnect, SIMCONNECT_DATA_DEFINITION_ID DefineID, const char * DatumName, const char * UnitsName, SIMCONNECT_DATATYPE DatumType = SIMCONNECT_DATATYPE_FLOAT64, float fEpsilon = 0, DWORD DatumID = SIMCONNECT_UNUSED);
    //int SimConnect_ClearDataDefinition(HANDLE hSimConnect, SIMCONNECT_DATA_DEFINITION_ID DefineID);
    //int SimConnect_RequestDataOnSimObject(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, SIMCONNECT_DATA_DEFINITION_ID DefineID, SIMCONNECT_OBJECT_ID ObjectID, SIMCONNECT_PERIOD Period, SIMCONNECT_DATA_REQUEST_FLAG Flags = 0, DWORD origin = 0, DWORD interval = 0, DWORD limit = 0);
    //int SimConnect_RequestDataOnSimObjectType(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, SIMCONNECT_DATA_DEFINITION_ID DefineID, DWORD dwRadiusMeters, SIMCONNECT_SIMOBJECT_TYPE type);
    //int SimConnect_SetDataOnSimObject(HANDLE hSimConnect, SIMCONNECT_DATA_DEFINITION_ID DefineID, SIMCONNECT_OBJECT_ID ObjectID, SIMCONNECT_DATA_SET_FLAG Flags, DWORD ArrayCount, DWORD cbUnitSize, void * pDataSet);
    //int SimConnect_MapInputEventToClientEvent(HANDLE hSimConnect, SIMCONNECT_INPUT_GROUP_ID GroupID, const char * szInputDefinition, SIMCONNECT_CLIENT_EVENT_ID DownEventID, DWORD DownValue = 0, SIMCONNECT_CLIENT_EVENT_ID UpEventID = (SIMCONNECT_CLIENT_EVENT_ID)SIMCONNECT_UNUSED, DWORD UpValue = 0, BOOL bMaskable = FALSE);
    //int SimConnect_SetInputGroupPriority(HANDLE hSimConnect, SIMCONNECT_INPUT_GROUP_ID GroupID, DWORD uPriority);
    //int SimConnect_RemoveInputEvent(HANDLE hSimConnect, SIMCONNECT_INPUT_GROUP_ID GroupID, const char * szInputDefinition);
    //int SimConnect_ClearInputGroup(HANDLE hSimConnect, SIMCONNECT_INPUT_GROUP_ID GroupID);
    //int SimConnect_SetInputGroupState(HANDLE hSimConnect, SIMCONNECT_INPUT_GROUP_ID GroupID, DWORD dwState);
    //int SimConnect_RequestReservedKey(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID, const char * szKeyChoice1 = "", const char * szKeyChoice2 = "", const char * szKeyChoice3 = "");
    //int SimConnect_SubscribeToSystemEvent(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID, const char * SystemEventName);
    //int SimConnect_UnsubscribeFromSystemEvent(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID);
    //int SimConnect_WeatherRequestInterpolatedObservation(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, float lat, float lon, float alt);
    //int SimConnect_WeatherRequestObservationAtStation(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, const char * szICAO);
    //int SimConnect_WeatherRequestObservationAtNearestStation(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, float lat, float lon);
    //int SimConnect_WeatherCreateStation(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, const char * szICAO, const char * szName, float lat, float lon, float alt);
    //int SimConnect_WeatherRemoveStation(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, const char * szICAO);
    //int SimConnect_WeatherSetObservation(HANDLE hSimConnect, DWORD Seconds, const char * szMETAR);
    //int SimConnect_WeatherSetModeServer(HANDLE hSimConnect, DWORD dwPort, DWORD dwSeconds);
    //int SimConnect_WeatherSetModeTheme(HANDLE hSimConnect, const char * szThemeName);
    //int SimConnect_WeatherSetModeGlobal(HANDLE hSimConnect);
    //int SimConnect_WeatherSetModeCustom(HANDLE hSimConnect);
    //int SimConnect_WeatherSetDynamicUpdateRate(HANDLE hSimConnect, DWORD dwRate);
    //int SimConnect_WeatherRequestCloudState(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, float minLat, float minLon, float minAlt, float maxLat, float maxLon, float maxAlt, DWORD dwFlags = 0);
    //int SimConnect_WeatherCreateThermal(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, float lat, float lon, float alt, float radius, float height, float coreRate = 3.0f, float coreTurbulence = 0.05f, float sinkRate = 3.0f, float sinkTurbulence = 0.2f, float coreSize = 0.4f, float coreTransitionSize = 0.1f, float sinkLayerSize = 0.4f, float sinkTransitionSize = 0.1f);
    //int SimConnect_WeatherRemoveThermal(HANDLE hSimConnect, SIMCONNECT_OBJECT_ID ObjectID);
    //int SimConnect_AICreateParkedATCAircraft(HANDLE hSimConnect, const char * szContainerTitle, const char * szTailNumber, const char * szAirportID, SIMCONNECT_DATA_REQUEST_ID RequestID);
    //int SimConnect_AICreateEnrouteATCAircraft(HANDLE hSimConnect, const char * szContainerTitle, const char * szTailNumber, int iFlightNumber, const char * szFlightPlanPath, double dFlightPlanPosition, BOOL bTouchAndGo, SIMCONNECT_DATA_REQUEST_ID RequestID);
    //int SimConnect_AICreateNonATCAircraft(HANDLE hSimConnect, const char * szContainerTitle, const char * szTailNumber, SIMCONNECT_DATA_INITPOSITION InitPos, SIMCONNECT_DATA_REQUEST_ID RequestID);
    //int SimConnect_AICreateSimulatedObject(HANDLE hSimConnect, const char * szContainerTitle, SIMCONNECT_DATA_INITPOSITION InitPos, SIMCONNECT_DATA_REQUEST_ID RequestID);
    //int SimConnect_AIReleaseControl(HANDLE hSimConnect, SIMCONNECT_OBJECT_ID ObjectID, SIMCONNECT_DATA_REQUEST_ID RequestID);
    //int SimConnect_AIRemoveObject(HANDLE hSimConnect, SIMCONNECT_OBJECT_ID ObjectID, SIMCONNECT_DATA_REQUEST_ID RequestID);
    //int SimConnect_AISetAircraftFlightPlan(HANDLE hSimConnect, SIMCONNECT_OBJECT_ID ObjectID, const char * szFlightPlanPath, SIMCONNECT_DATA_REQUEST_ID RequestID);
    //int SimConnect_ExecuteMissionAction(HANDLE hSimConnect, const GUID guidInstanceId);
    //int SimConnect_CompleteCustomMissionAction(HANDLE hSimConnect, const GUID guidInstanceId);
    //int SimConnect_Close(HANDLE hSimConnect);
    //int SimConnect_RetrieveString(SIMCONNECT_RECV * pData, DWORD cbData, void * pStringV, char ** pszString, DWORD * pcbString);
    //int SimConnect_GetLastSentPacketID(HANDLE hSimConnect, DWORD * pdwError);
    //int SimConnect_Open(HANDLE * phSimConnect, LPCSTR szName, HWND hWnd, DWORD UserEventWin32, HANDLE hEventHandle, DWORD ConfigIndex);
    //int SimConnect_CallDispatch(HANDLE hSimConnect, DispatchProc pfcnDispatch, void * pContext);
    //int SimConnect_GetNextDispatch(HANDLE hSimConnect, SIMCONNECT_RECV ** ppData, DWORD * pcbData);
    //int SimConnect_RequestResponseTimes(HANDLE hSimConnect, DWORD nCount, float * fElapsedSeconds);
    //int SimConnect_InsertString(char * pDest, DWORD cbDest, void ** ppEnd, DWORD * pcbStringV, const char * pSource);
    //int SimConnect_CameraSetRelative6DOF(HANDLE hSimConnect, float fDeltaX, float fDeltaY, float fDeltaZ, float fPitchDeg, float fBankDeg, float fHeadingDeg);
    //int SimConnect_MenuAddItem(HANDLE hSimConnect, const char * szMenuItem, SIMCONNECT_CLIENT_EVENT_ID MenuEventID, DWORD dwData);
    //int SimConnect_MenuDeleteItem(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID MenuEventID);
    //int SimConnect_MenuAddSubItem(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID MenuEventID, const char * szMenuItem, SIMCONNECT_CLIENT_EVENT_ID SubMenuEventID, DWORD dwData);
    //int SimConnect_MenuDeleteSubItem(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID MenuEventID, const SIMCONNECT_CLIENT_EVENT_ID SubMenuEventID);
    //int SimConnect_RequestSystemState(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, const char * szState);
    //int SimConnect_SetSystemState(HANDLE hSimConnect, const char * szState, DWORD dwInteger, float fFloat, const char * szString);
    //int SimConnect_MapClientDataNameToID(HANDLE hSimConnect, const char * szClientDataName, SIMCONNECT_CLIENT_DATA_ID ClientDataID);
    //int SimConnect_CreateClientData(HANDLE hSimConnect, SIMCONNECT_CLIENT_DATA_ID ClientDataID, DWORD dwSize, SIMCONNECT_CREATE_CLIENT_DATA_FLAG Flags);
    //int SimConnect_AddToClientDataDefinition(HANDLE hSimConnect, SIMCONNECT_CLIENT_DATA_DEFINITION_ID DefineID, DWORD dwOffset, DWORD dwSizeOrType, float fEpsilon = 0, DWORD DatumID = SIMCONNECT_UNUSED);
    //int SimConnect_ClearClientDataDefinition(HANDLE hSimConnect, SIMCONNECT_CLIENT_DATA_DEFINITION_ID DefineID);
    //int SimConnect_RequestClientData(HANDLE hSimConnect, SIMCONNECT_CLIENT_DATA_ID ClientDataID, SIMCONNECT_DATA_REQUEST_ID RequestID, SIMCONNECT_CLIENT_DATA_DEFINITION_ID DefineID, SIMCONNECT_CLIENT_DATA_PERIOD Period = SIMCONNECT_CLIENT_DATA_PERIOD_ONCE, SIMCONNECT_CLIENT_DATA_REQUEST_FLAG Flags = 0, DWORD origin = 0, DWORD interval = 0, DWORD limit = 0);
    //int SimConnect_SetClientData(HANDLE hSimConnect, SIMCONNECT_CLIENT_DATA_ID ClientDataID, SIMCONNECT_CLIENT_DATA_DEFINITION_ID DefineID, SIMCONNECT_CLIENT_DATA_SET_FLAG Flags, DWORD dwReserved, DWORD cbUnitSize, void * pDataSet);
    //int SimConnect_FlightLoad(HANDLE hSimConnect, const char * szFileName);
    //int SimConnect_FlightSave(HANDLE hSimConnect, const char * szFileName, const char * szTitle, const char * szDescription, DWORD Flags);
    //int SimConnect_FlightPlanLoad(HANDLE hSimConnect, const char * szFileName);
    //int SimConnect_Text(HANDLE hSimConnect, SIMCONNECT_TEXT_TYPE type, float fTimeSeconds, SIMCONNECT_CLIENT_EVENT_ID EventID, DWORD cbUnitSize, void * pDataSet);
    //int SimConnect_SubscribeToFacilities(HANDLE hSimConnect, SIMCONNECT_FACILITY_LIST_TYPE type, SIMCONNECT_DATA_REQUEST_ID RequestID);
    //int SimConnect_UnsubscribeToFacilities(HANDLE hSimConnect, SIMCONNECT_FACILITY_LIST_TYPE type);
    //int SimConnect_RequestFacilitiesList(HANDLE hSimConnect, SIMCONNECT_FACILITY_LIST_TYPE type, SIMCONNECT_DATA_REQUEST_ID RequestID);
    L'idéal serait d'écrire une DLL en C qui encapsulerait toutes les fonctions dont vous avez besoin dans WinDev, afin de pouvoir utiliser "API" de façon "simple".

    Mais vouloir faire çà en WinDev je trouve que c'est culotté...

  18. #18
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 810
    Points : 5 269
    Points
    5 269
    Billets dans le blog
    1
    Par défaut
    Attention aussi aux indices. En C, on commence à 0 alors qu'en WL, on commence à 1.
    Attention aussi aux passage de paramètres par défaut, en WL le passage de paramètre se fait par adresse alors qu'en C le passage se fait par valeur. En WL, pour forcer le passage par valeur, il faut, dans le déclaration, que le paramètre soit précédé par LOCAL.
    Prenons le cas suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    PROCEDURE Incrémente (nParamètre est  entier)
    nParamètre++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FONCTION IncrémenteLocal(LOCAL nParamètre est  entier): entier
    nParamètre++
    RENVOYER nParamètre
    Utilisons maintenant cette procédure et cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    PROCÉDURE AdresseLocal()
    nContrôleur est un entier
    nResultat est un entier
     
    nContrôleur=1
     
    Incrémente(nContrôleur)//nContrôleur vaut maintenant 2
    nResultat=IncrémenteLocal(nContrôleur)//nContrôleur vaut toujours 2 nResultat vaut 3
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Voroltinquo a raison, en C toutes les énumérations commence par zéro, comme je l'ai écrit dans mon message

    Concernant les énumérations en C, pour les nombres elle commencent toujours par 0 par défaut
    0,1,2,3,4,5,6,7,8,9,10, etc.

  20. #20
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Merci Voroltinquo,

    Effectivement Patrice m'avait bien expliqué les énumérations quant aux indices, chose différente, je savais bien qu'ils commençaient par 0 en WL.

    En revanche pour la déclaration d'une variable en locale, je ne comprends pas comment l'utiliser dans un appel API, ou bien fait il que je crée une fonction WL correspondant à une fonction dans L'API ?
    Comme par exemple celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nResultat = API( sSimConnect_DLL , "SimConnect_RequestDataOnSimObject" , gnPhSimConnect , REQUEST_1 , DEFINITION_1 , SimConnect.SIMCONNECT_OBJECT_ID_USER , SIMCONNECT_PERIOD_ONCE)
    sSimConnect_DLL = variable donnant le nom de la DLL (ici "SimConnect.dll")
    "SimConnect_RequestDataOnSimObject" = fonction à appeler
    REQUEST_1 = énumération permettant de reconnaitre la requête lors de l'appel de la réponse
    DEFINITION_1 = énumération
    SIMCONNECT_PERIOD_ONCE = constante pour définir la fréquence de la demande.

Discussions similaires

  1. Migration Acess vers Windev 11 ou 12
    Par kommen dans le forum Access
    Réponses: 3
    Dernier message: 31/01/2008, 11h57
  2. [Windev 11] Migration VB6 vers Windev
    Par sterix92 dans le forum WinDev
    Réponses: 4
    Dernier message: 26/12/2007, 15h57
  3. extraction vers windev --> ajout d'espaces à droite
    Par Arnaud M dans le forum Informix
    Réponses: 3
    Dernier message: 26/03/2007, 09h51
  4. Migration WinDev 7 vers WinDev 8
    Par amarni dans le forum WinDev
    Réponses: 7
    Dernier message: 13/10/2006, 18h58
  5. Traduction des Union C/C++ vers Delphi (usage DLL)
    Par Crafton dans le forum Langage
    Réponses: 6
    Dernier message: 22/02/2006, 08h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo