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. #21
    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
    Avez-vous vu ma transposition du header C en code WinDev ?

  2. #22
    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
    Citation Envoyé par Patrice Terrier Voir le message
    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é...


    Patrice ,

    Encore merci pour cette transposition.
    J'ai fait quelques corrections car Windev m'annonçait des erreurs. Mais je pense m'en être sorti suite à vos infos

    Reste maintenant à refaire des essais notamment avec la fonction transfert pour récupérer les réponses. Le plus compliqué, je pense, est de savoir quand utiliser les adresses des variables avec les appels API.


  3. #23
    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 270
    Points
    5 270
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par didierma34 Voir le message
    Le plus compliqué, je pense, est de savoir quand utiliser les adresses des variables avec les appels API.
    C'est totalement transparent, il suffit de savoir que c'est une adresse qu'il faut passer et pas une valeur. Pour ça il suffit de faire préceder ta variable par le caractère "&"
    Passage par valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Res=MaFonction(MaValeur)
    Passage par adresse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Res=MaFonction(&MaValeur)
    Au pire (ceinture et bretelle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    nAdresseMaValeur est entier système
     
    nAdresseMaValeur=&MaValeur
    Res=MaFonction(nAdresseMaValeur)
    Tu peux alors manipuler MaValeur sans t'occuper qu'elle a été passée par adresse ou par valeur
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  4. #24
    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
    Dans tous les cas vous devez utiliser des entiers de type "system int" pour tous les pointeurs, puisque la DLL est en 64-bit.
    Avec WinDev 64-bit il faut aussi veiller aux valeurs retournées par l'appel aux fonctions, car c'est toujours des registres 64-bit qui sont renvoyés par le mot clé "API".
    Concernant les chaines de caractères, elles sont toutes en ANSI car FS a été écrit il a l'origine en C, avant qu'Unicode ne devienne le standard Windows.

  5. #25
    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
    Voroltinquo :
    Merci, c'est tout bon pour ça...

    Patrice :

    Merci également, effectivement j'ai modifié des variables en système int car certains pointeurs étaient en int.
    La aussi cela a bien avancé.

    Je vais maintenant attaquer le principe même de l'api et je ne crois que cela va être simple car le SDK n'est bavard. De plus certaine références que j'ai trouvées sont contradictoires, notamment dans le principe d'appel et de réponse.

    Il va falloir de l'aide sur la philosophie du SimConnect.
    Je vais essayer avec des exemples...

    Je vais aussi pour passer en mode txt avec Windev pour mettre sur Github et partager. Mais ce sera un peu plus tard.

    Encore merci, merci pour votre aide.
    Si vous connaissez des développeurs ayant utilisés correctement ce SimConnect, cela sera intéressant.


  6. #26
    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
    Je n'utilise pas FS, je n'ai donc aucune idée de ce que fait Simconnect.
    A vous de dire ce que vous voulez faire avec, ainsi que les API FS dont vous avez besoin.

  7. #27
    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...

    Je vais mettre un post pour expliquer cela et un exemple.

    En attendant, pourrais-tu me dire comment fonctionne les héritages dans les structures ?

    Je te pose la question car je viens de voir ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE : public SIMCONNECT_RECV_SIMOBJECT_DATA           // when dwID == SIMCONNECT_RECV_ID_SIMOBJECT_DATA_BYTYPE
    {
    };
    Je dois donc comprendre que la structure SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE reprends la structure de SIMCONNECT_RECV_SIMOBJECT_DATA.

    Mais que ce passet-t-il lorsqu'il y a un héritage de structure de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_SIMOBJECT_DATA : public SIMCONNECT_RECV           // when dwID == SIMCONNECT_RECV_ID_SIMOBJECT_DATA
    {
        DWORD   dwRequestID;
        DWORD   dwObjectID;
        DWORD   dwDefineID;
        DWORD   dwFlags;            // SIMCONNECT_DATA_REQUEST_FLAG
        DWORD   dwentrynumber;      // if multiple objects returned, this is number <entrynumber> out of <outof>.
        DWORD   dwoutof;            // note: starts with 1, not 0.          
        DWORD   dwDefineCount;      // data count (number of datums, *not* byte count)
        SIMCONNECT_DATAV(   dwData, dwDefineID, );             // data begins here, dwDefineCount data items
    };
    On voit bien que la structure SIMCONNECT_RECV_SIMOBJECT_DATA hérite de SIMCONNECT_RECV.
    Mais dans ce cas est-ce que la structure comprendra finalement les membres de la structure héritée ?
    Autrement dit est-ce que la structure SIMCONNECT_RECV_SIMOBJECT_DATA sera-t-elle celle de SIMCONNECT_RECV à laquelle il sera ajouté les membres contenus dans les guillemets, comme l'exemple ci-dessous ?


    -------------------------------------
    -------------------------------------
    Autre question :

    Dans le simconnect.h, il y a ceci :

    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
    
    #define SIMCONNECT_DATAV(name, id, count) DWORD name
    
    .....
    
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_SIMOBJECT_DATA : public SIMCONNECT_RECV           // when dwID == SIMCONNECT_RECV_ID_SIMOBJECT_DATA
    {
        DWORD   dwRequestID;
        DWORD   dwObjectID;
        DWORD   dwDefineID;
        DWORD   dwFlags;            // SIMCONNECT_DATA_REQUEST_FLAG
        DWORD   dwentrynumber;      // if multiple objects returned, this is number <entrynumber> out of <outof>.
        DWORD   dwoutof;            // note: starts with 1, not 0.          
        DWORD   dwDefineCount;      // data count (number of datums, *not* byte count)
        SIMCONNECT_DATAV(   dwData, dwDefineID, );             // data begins here, dwDefineCount data items
    };
    A quoi correspond ce : #define SIMCONNECT_DATAV(name, id, count) DWORD name ?

    Est-ce la définition d'un tableau ?

    Ensuite il y a ceci : SIMCONNECT_DATAV( dwData, dwDefineID, ); ?

    Est-ce une déclaration de tableau a partir de celle définie plus haut ?

    Merci

  8. #28
    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
    J'ai du nouveau :

    J'ai installé Visual Studio pour vérifier que les codes d'essai étaient correctes.
    Tout est ok et je peux donc me baser sur quelque chose de fonctionnel.

    Il n'empêche que je n'ai pas toutes les réponses à mes questions concernant la correspondance avec Windev, mais j'avance.

    J'ai une procédure de callback :

    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
    void CALLBACK MyDispatchProcRD(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext)
    {
        HRESULT hr;
     
        switch(pData->dwID)
        {
     
            case SIMCONNECT_RECV_ID_SIMOBJECT_DATA:
            {
                SIMCONNECT_RECV_SIMOBJECT_DATA* pObjData = (SIMCONNECT_RECV_SIMOBJECT_DATA*)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;
            }
     
            case SIMCONNECT_RECV_ID_QUIT:
            {
                quit = 1;
                break;
            }
     
            default:
                printf("\nReceived:%d",pData->dwID);
                break;
        }
    }

    Pour ma correspondance WLangage , j'ai déjà un soucis avec le début de cette procédure :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    void CALLBACK MyDispatchProcRD(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext)

    Le premier paramètre me pose problème car si je le définis comme une structure, j'ai une erreur d'exécution.
    Si je le définis en "entier système" pour récupérer l'adresse de pData et ansi utiliser la fonction transfert, je n'ai rien qui va.

    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
    PROCÉDURE MyDispatchProcRD(pData est un entier système, LOCAL nCbData est un entier système, LOCAL pContext est un entier système)
     
    Structure_pData est un SIMCONNECT_RECV
    stPobjData est un SIMCONNECT_RECV_SIMOBJECT_DATA
     
    Transfert(&Structure_pData, &pData, Dimension(Structure_pData))
     
     
    SELON Structure_pData.DwID
     
    	CAS SIMCONNECT_RECV_ID_SIMOBJECT_DATA : 
     
    		Transfert(&stPobjData, &pData, Dimension(stPobjData))
     
    		Trace("SIMCONNECT_RECV_ID_SIMOBJECT_DATA")
     
    	AUTRE CAS
     
    FIN
    Avec ce code initial, je n'arrive pas à récupérer le "pData.DwID". J'ai une valeur qui est toujours la même et qui ne correspond à une valeur bien supérieure à celle attendue. Elle se situe dans les 300 pour une maximale de 72.
    Je pense que la récupération de la structure n'est pas bonne avec "Transfert(&Structure_pData, &pData, Dimension(Structure_pData))", mais je ne vois pas comment faire. Je suis un peu bloqué ici, pour le moment.
    Une fois cela débloqué je pourrai poursuivre la suite.

    Si vous avez des idées comme vous l'avez déjà si gentiment eut, ce serait génial.

  9. #29
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure MyDispatchProcRD(pData is SIMCONNECT_RECV, local cbData is unsigned int, local pContext is system int)
        if (pData.dwID = SIMCONNECT_RECV_ID_SIMOBJECT_DATA) then
            pObjData is SIMCONNECT_RECV_SIMOBJECT_DATA;
            VariableReset(pObjData);
            transfer(&pObjData, &pData, dimension(pObjData));
            Trace("SIMCONNECT_RECV_ID_SIMOBJECT_DATA");
        end
        cbData = 0; pContext = NULL; // To please WinDev

  10. #30
    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
    Citation Envoyé par Patrice Terrier Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure MyDispatchProcRD(pData is SIMCONNECT_RECV, local cbData is unsigned int, local pContext is system int)
        if (pData.dwID = SIMCONNECT_RECV_ID_SIMOBJECT_DATA) then
            pObjData is SIMCONNECT_RECV_SIMOBJECT_DATA;
            VariableReset(pObjData);
            transfer(&pObjData, &pData, dimension(pObjData));
            Trace("SIMCONNECT_RECV_ID_SIMOBJECT_DATA");
        end
        cbData = 0; pContext = NULL; // To please WinDev
    Merci Patrice !

    En gros j'avais déjà essayé avec cette syntaxe pour la définition de la procédure et j'ai toujours cette erreur :
    "Le passage du paramètre 1 a provoqué une erreur.
    Un élément de type 'entier' ne peut pas être converti vers le type 'SIMCONNECT_RECV'."

    Je pense donc que ce premier paramètre serait l'adresse à laquelle se trouve la variable, mais dans ce cas je me retrouve avec le problème de mon précédent post. Grrr...
    Et j'ai donc utilisé cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procédure MyDispatchProcRD(nPData est un entier systeme, local nCbData est un entier système, local nPContext est un entier système)
     
       Structure_pData est un SIMCONNECT_RECV
     
       Transfert(&Structure_pData, &PData, Dimension(Structure_pData))
     
    etc...
    Techniquement ça fonctionne mais je n'ai jamais la bonne valeur dans "Structure_pData.dwID". Elle devrait être comprise entre 0 et 72 alors que celle que je lis est 308, et parfois 24 (cela ne correspond à rien).
    J'ai donc un problème de récupération de variable.
    Je vais même jusqu'à me demander si la variable pData passée en premier paramètre est bien une adresse mémoire.
    De plus la valeur de "Structure_pData.dwID" est toujours la même alors qu'elle devrait changer en fonction de la réponse et du type de réponse. La valeur de SIMCONNECT_RECV_ID_SIMOBJECT_DATA est 8. Je n'ai jamais cette valeur.
    Je pense que tout le reste est bon mais cette récupération de variable ne fonctionne pas. Snif Snif...

    Comme je le disais dans un précédant post. J'ai installé VStudio et lorsque je lance un débug sur un code d'exemple simpliste, tout se passe bien. J'utilise la même DLL (SimConnect) avec le même fichier.

  11. #31
    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
    Dans votre exemple, vous devez utiliser &nPData au lieu de &PData.

    Est-ce qu'on peut tester le code Visual Studio sans installer Flight Simulator ?
    Si la réponse est oui, alors vous pouvez m'envoyer le code C qui fonctionne, ainsi que le code WD que vous voulez tester.

  12. #32
    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
    Oui tout à fait pour npData, mais cela ne change rien car l'erreur se produit avant. Je me suis trompé en faisant un copier/coller.


    Sans un Simulateur, il n'est pas possible de le tester.
    Cela serait trop bien et beaucoup plus léger.

  13. #33
    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
    Voici le code qui réside en un seul fichier car c'est un résultat console.

    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
    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
    // Copyright (c) Asobo Studio, All rights reserved. www.asobostudio.com
    //------------------------------------------------------------------------------
    //
    //  SimConnect Data Request Sample
    //  
    //	Description:
    //				After a flight has loaded, request the lat/lon/alt of the user 
    //				aircraft
    //------------------------------------------------------------------------------
     
    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <strsafe.h>
     
    #include "SimConnect.h"
     
    int     quit = 0;
    HANDLE  hSimConnect = NULL;
     
    struct Struct1
    {
        char    title[256];
        double  kohlsmann;
        double  altitude;
        double  latitude;
        double  longitude;
    };
     
    static enum EVENT_ID{
        EVENT_SIM_START,
    };
     
    static enum DATA_DEFINE_ID {
        DEFINITION_1,
    };
     
    static enum DATA_REQUEST_ID {
        REQUEST_1,
    };
     
    void CALLBACK MyDispatchProcRD(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext)
    {
        HRESULT hr;
     
        switch(pData->dwID)
        {
     
            case SIMCONNECT_RECV_ID_SIMOBJECT_DATA:
            {
                SIMCONNECT_RECV_SIMOBJECT_DATA* pObjData = (SIMCONNECT_RECV_SIMOBJECT_DATA*)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;
            }
     
            case SIMCONNECT_RECV_ID_QUIT:
            {
                quit = 1;
                break;
            }
     
            default:
                printf("\nReceived:%d",pData->dwID);
                break;
        }
    }
     
    void testDataRequest()
    {
        HRESULT hr;
     
        if (SUCCEEDED(SimConnect_Open(&hSimConnect, "Request Data", NULL, 0, 0, 0)))
        {
            printf("\nConnected to Flight Simulator!");   
     
            // Set up the data definition, but do not yet do anything with it
            hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_1, "Title", NULL, SIMCONNECT_DATATYPE_STRING256);
            hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_1, "KOHLSMAN SETTING MB", "Millibars");
            hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_1, "INDICATED ALTITUDE", "feet");
            hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_1, "Plane Latitude", "degrees");
            hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_1, "Plane Longitude", "degrees");
     
            // Request an event when the simulation starts
            // Didier : j'ai mis les // juste en dessous Cela arrête la détection de lancement du simulateur et c'est inutile dans mon code
            // hr = SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_SIM_START, "SimStart");
     
            hr = SimConnect_RequestDataOnSimObject(hSimConnect, REQUEST_1, DEFINITION_1, SIMCONNECT_SIMOBJECT_TYPE_USER, SIMCONNECT_PERIOD_VISUAL_FRAME);
     
            printf("\nLaunch a flight.");
     
            while( 0 == quit )
            {
                SimConnect_CallDispatch(hSimConnect, MyDispatchProcRD, NULL);
                Sleep(1);
            }
     
            hr = SimConnect_Close(hSimConnect);
        }
    }
     
    int __cdecl _tmain(int argc, _TCHAR* argv[])
    {
     
        testDataRequest();
     
    	return 0;
    }


    Et voici le simconnect.h :

    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
    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
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    696
    697
    698
    699
    700
    701
    702
    703
    704
    705
    706
    707
    708
    709
    710
    711
    712
    713
    714
    715
    716
    717
    718
    719
    720
    721
    722
    723
    724
    725
    726
    727
    728
    729
    730
    731
    732
    733
    734
    735
    736
    737
    738
    739
    740
    741
    742
    743
    744
    745
    746
    747
    748
    749
    750
    751
    752
    753
    754
    755
    756
    757
    758
    759
    760
    761
    762
    763
    764
    765
    766
    767
    768
    769
    770
    771
    772
    773
    774
    775
    776
    //-----------------------------------------------------------------------------
    //
    // 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
    //----------------------------------------------------------------------------
     
    static const DWORD SIMCONNECT_UNUSED           = DWORD_MAX;   // special value to indicate unused event, ID
    static const DWORD SIMCONNECT_OBJECT_ID_USER   = 0;           // proxy value for User vehicle ObjectID
     
    static const float SIMCONNECT_CAMERA_IGNORE_FIELD   = FLT_MAX;  //Used to tell the Camera API to NOT modify the value in this part of the argument.
     
    static const DWORD SIMCONNECT_CLIENTDATA_MAX_SIZE = 8192;     // maximum value for SimConnect_CreateClientData dwSize parameter
     
     
    // Notification Group priority values
    static const DWORD SIMCONNECT_GROUP_PRIORITY_HIGHEST              =          1;      // highest priority
    static const DWORD SIMCONNECT_GROUP_PRIORITY_HIGHEST_MASKABLE     =   10000000;      // highest priority that allows events to be masked
    static const DWORD SIMCONNECT_GROUP_PRIORITY_STANDARD             = 1900000000;      // standard priority
    static const DWORD SIMCONNECT_GROUP_PRIORITY_DEFAULT              = 2000000000;      // default priority
    static const DWORD SIMCONNECT_GROUP_PRIORITY_LOWEST               = 4000000000;      // priorities lower than this will be ignored
     
    //Weather observations Metar strings
    static const DWORD MAX_METAR_LENGTH = 2000;
     
    // Maximum thermal size is 100 km.
    static const float MAX_THERMAL_SIZE = 100000;
    static const float MAX_THERMAL_RATE = 1000;
     
    // SIMCONNECT_DATA_INITPOSITION.Airspeed
    static const DWORD INITPOSITION_AIRSPEED_CRUISE = -1;       // aircraft's cruise airspeed
    static const DWORD INITPOSITION_AIRSPEED_KEEP = -2;         // keep current airspeed
     
    // AddToClientDataDefinition dwSizeOrType parameter type values
    static const DWORD SIMCONNECT_CLIENTDATATYPE_INT8       = -1;   //  8-bit integer number
    static const DWORD SIMCONNECT_CLIENTDATATYPE_INT16      = -2;   // 16-bit integer number
    static const DWORD SIMCONNECT_CLIENTDATATYPE_INT32      = -3;   // 32-bit integer number
    static const DWORD SIMCONNECT_CLIENTDATATYPE_INT64      = -4;   // 64-bit integer number
    static const DWORD SIMCONNECT_CLIENTDATATYPE_FLOAT32    = -5;   // 32-bit floating-point number (float)
    static const DWORD SIMCONNECT_CLIENTDATATYPE_FLOAT64    = -6;   // 64-bit floating-point number (double)
     
    // AddToClientDataDefinition dwOffset parameter special values
    static const DWORD SIMCONNECT_CLIENTDATAOFFSET_AUTO    = -1;   // automatically compute offset of the ClientData variable
     
    // Open ConfigIndex parameter special value
    static const DWORD SIMCONNECT_OPEN_CONFIGINDEX_LOCAL   = -1;   // ignore SimConnect.cfg settings, and force local connection
     
    //----------------------------------------------------------------------------
    //        Enum definitions
    //----------------------------------------------------------------------------
     
    //these came from substituteMacros
    #define SIMCONNECT_REFSTRUCT struct
    #define SIMCONNECT_STRUCT struct
    #define SIMCONNECT_STRING(name, size) char name[size]
    #define SIMCONNECT_GUID GUID
    #define SIMCONNECT_STRINGV(name) char name[1]
    #define SIMCONNECT_DATAV(name, id, count) DWORD name
    #define SIMCONNECT_FIXEDTYPE_DATAV(type, name, count, cliMarshalAs, cliType) type name[1]
    #define SIMCONNECT_GUID GUID
    #define SIMCONNECT_ENUM enum
    #define SIMCONNECT_ENUM_FLAGS typedef DWORD
    #define SIMCONNECT_USER_ENUM typedef DWORD
     
     
    // Receive data types
    SIMCONNECT_ENUM SIMCONNECT_RECV_ID {
        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,
    #ifdef ENABLE_SIMCONNECT_EXPERIMENTAL
        SIMCONNECT_RECV_ID_PICK,
    #endif //ENABLE_SIMCONNECT_EXPERIMENTAL
    };
     
     
     
    // Data data types
    SIMCONNECT_ENUM SIMCONNECT_DATATYPE {
        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
    };
     
    // Exception error types
    SIMCONNECT_ENUM SIMCONNECT_EXCEPTION {
        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,
    };
     
    // Object types
    SIMCONNECT_ENUM SIMCONNECT_SIMOBJECT_TYPE {
        SIMCONNECT_SIMOBJECT_TYPE_USER,
        SIMCONNECT_SIMOBJECT_TYPE_ALL,
        SIMCONNECT_SIMOBJECT_TYPE_AIRCRAFT,
        SIMCONNECT_SIMOBJECT_TYPE_HELICOPTER,
        SIMCONNECT_SIMOBJECT_TYPE_BOAT,
        SIMCONNECT_SIMOBJECT_TYPE_GROUND,
    };
     
    // EventState values
    SIMCONNECT_ENUM SIMCONNECT_STATE {
        SIMCONNECT_STATE_OFF,
        SIMCONNECT_STATE_ON,
    };
     
    // Object Data Request Period values
    SIMCONNECT_ENUM SIMCONNECT_PERIOD {
        SIMCONNECT_PERIOD_NEVER,
        SIMCONNECT_PERIOD_ONCE,
        SIMCONNECT_PERIOD_VISUAL_FRAME,
        SIMCONNECT_PERIOD_SIM_FRAME,
        SIMCONNECT_PERIOD_SECOND,
    };
     
     
    SIMCONNECT_ENUM SIMCONNECT_MISSION_END {
        SIMCONNECT_MISSION_FAILED,
        SIMCONNECT_MISSION_CRASHED,
        SIMCONNECT_MISSION_SUCCEEDED
    };
     
    // ClientData Request Period values
    SIMCONNECT_ENUM SIMCONNECT_CLIENT_DATA_PERIOD {
        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,
    };
     
    SIMCONNECT_ENUM SIMCONNECT_TEXT_TYPE {
        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,
    };
     
    SIMCONNECT_ENUM SIMCONNECT_TEXT_RESULT {
        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,
    };
     
    SIMCONNECT_ENUM SIMCONNECT_WEATHER_MODE {
        SIMCONNECT_WEATHER_MODE_THEME,
        SIMCONNECT_WEATHER_MODE_RWW,
        SIMCONNECT_WEATHER_MODE_CUSTOM,
        SIMCONNECT_WEATHER_MODE_GLOBAL,
    };
     
    SIMCONNECT_ENUM SIMCONNECT_FACILITY_LIST_TYPE {
        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 
    };
     
     
    SIMCONNECT_ENUM_FLAGS SIMCONNECT_VOR_FLAGS;            // flags for SIMCONNECT_RECV_ID_VOR_LIST 
        static const DWORD SIMCONNECT_RECV_ID_VOR_LIST_HAS_NAV_SIGNAL  = 0x00000001;   // Has Nav signal
        static const DWORD SIMCONNECT_RECV_ID_VOR_LIST_HAS_LOCALIZER   = 0x00000002;   // Has localizer
        static const DWORD SIMCONNECT_RECV_ID_VOR_LIST_HAS_GLIDE_SLOPE = 0x00000004;   // Has Nav signal
        static const DWORD SIMCONNECT_RECV_ID_VOR_LIST_HAS_DME         = 0x00000008;   // Station has DME
     
     
     
    // bits for the Waypoint Flags field: may be combined
    SIMCONNECT_ENUM_FLAGS SIMCONNECT_WAYPOINT_FLAGS;
        static const DWORD SIMCONNECT_WAYPOINT_NONE                    = 0x00;
        static const DWORD SIMCONNECT_WAYPOINT_SPEED_REQUESTED         = 0x04;    // requested speed at waypoint is valid
        static const DWORD SIMCONNECT_WAYPOINT_THROTTLE_REQUESTED      = 0x08;    // request a specific throttle percentage
        static const DWORD SIMCONNECT_WAYPOINT_COMPUTE_VERTICAL_SPEED  = 0x10;    // compute vertical to speed to reach waypoint altitude when crossing the waypoint
        static const DWORD SIMCONNECT_WAYPOINT_ALTITUDE_IS_AGL         = 0x20;    // AltitudeIsAGL
        static const DWORD SIMCONNECT_WAYPOINT_ON_GROUND               = 0x00100000;   // place this waypoint on the ground
        static const DWORD SIMCONNECT_WAYPOINT_REVERSE                 = 0x00200000;   // Back up to this waypoint. Only valid on first waypoint
        static const DWORD SIMCONNECT_WAYPOINT_WRAP_TO_FIRST           = 0x00400000;   // Wrap around back to first waypoint. Only valid on last waypoint.
     
    SIMCONNECT_ENUM_FLAGS SIMCONNECT_EVENT_FLAG;
        static const DWORD SIMCONNECT_EVENT_FLAG_DEFAULT                  = 0x00000000;
        static const DWORD SIMCONNECT_EVENT_FLAG_FAST_REPEAT_TIMER        = 0x00000001;      // set event repeat timer to simulate fast repeat
        static const DWORD SIMCONNECT_EVENT_FLAG_SLOW_REPEAT_TIMER        = 0x00000002;      // set event repeat timer to simulate slow repeat
        static const DWORD SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY      = 0x00000010;      // interpret GroupID parameter as priority value
     
    SIMCONNECT_ENUM_FLAGS SIMCONNECT_DATA_REQUEST_FLAG;
        static const DWORD SIMCONNECT_DATA_REQUEST_FLAG_DEFAULT           = 0x00000000;
        static const DWORD SIMCONNECT_DATA_REQUEST_FLAG_CHANGED           = 0x00000001;      // send requested data when value(s) change
        static const DWORD SIMCONNECT_DATA_REQUEST_FLAG_TAGGED            = 0x00000002;      // send requested data in tagged format
     
    SIMCONNECT_ENUM_FLAGS SIMCONNECT_DATA_SET_FLAG;
        static const DWORD SIMCONNECT_DATA_SET_FLAG_DEFAULT               = 0x00000000;
        static const DWORD SIMCONNECT_DATA_SET_FLAG_TAGGED                = 0x00000001;      // data is in tagged format
     
    SIMCONNECT_ENUM_FLAGS SIMCONNECT_CREATE_CLIENT_DATA_FLAG;
        static const DWORD SIMCONNECT_CREATE_CLIENT_DATA_FLAG_DEFAULT     = 0x00000000;
        static const DWORD SIMCONNECT_CREATE_CLIENT_DATA_FLAG_READ_ONLY   = 0x00000001;      // permit only ClientData creator to write into ClientData
     
     
    SIMCONNECT_ENUM_FLAGS SIMCONNECT_CLIENT_DATA_REQUEST_FLAG;
        static const DWORD SIMCONNECT_CLIENT_DATA_REQUEST_FLAG_DEFAULT    = 0x00000000;
        static const DWORD SIMCONNECT_CLIENT_DATA_REQUEST_FLAG_CHANGED    = 0x00000001;      // send requested ClientData when value(s) change
        static const DWORD SIMCONNECT_CLIENT_DATA_REQUEST_FLAG_TAGGED     = 0x00000002;      // send requested ClientData in tagged format
     
    SIMCONNECT_ENUM_FLAGS SIMCONNECT_CLIENT_DATA_SET_FLAG;
        static const DWORD SIMCONNECT_CLIENT_DATA_SET_FLAG_DEFAULT        = 0x00000000;
        static const DWORD SIMCONNECT_CLIENT_DATA_SET_FLAG_TAGGED         = 0x00000001;      // data is in tagged format
     
     
    SIMCONNECT_ENUM_FLAGS SIMCONNECT_VIEW_SYSTEM_EVENT_DATA;                // dwData contains these flags for the "View" System Event
        static const DWORD SIMCONNECT_VIEW_SYSTEM_EVENT_DATA_COCKPIT_2D      = 0x00000001;      // 2D Panels in cockpit view
        static const DWORD SIMCONNECT_VIEW_SYSTEM_EVENT_DATA_COCKPIT_VIRTUAL = 0x00000002;      // Virtual (3D) panels in cockpit view
        static const DWORD SIMCONNECT_VIEW_SYSTEM_EVENT_DATA_ORTHOGONAL      = 0x00000004;      // Orthogonal (Map) view
     
    SIMCONNECT_ENUM_FLAGS SIMCONNECT_SOUND_SYSTEM_EVENT_DATA;            // dwData contains these flags for the "Sound" System Event
        static const DWORD SIMCONNECT_SOUND_SYSTEM_EVENT_DATA_MASTER    = 0x00000001;      // Sound Master
     
     
    #ifdef ENABLE_SIMCONNECT_EXPERIMENTAL
     
    SIMCONNECT_ENUM_FLAGS SIMCONNECT_PICK_FLAGS
    {
        SIMCONNECT_PICK_GROUND           = 0x01,    // pick ground/ pick result item is ground location
        SIMCONNECT_PICK_AI               = 0x02,    // pick AI    / pick result item is AI, (dwSimObjectID is valid)
        SIMCONNECT_PICK_SCENERY          = 0x04,    // pick scenery/ pick result item is scenery object (hSceneryObject is valid)
        SIMCONNECT_PICK_ALL              = SIMCONNECT_PICK_SCENERY | SIMCONNECT_PICK_AI | SIMCONNECT_PICK_GROUND, // pick all / (not valid on pick result item)
        SIMCONNECT_PICK_COORDSASPIXELS   = 0x08,
    };
     
    #endif //ENABLE_SIMCONNECT_EXPERIMENTAL
     
    //----------------------------------------------------------------------------
    //        User-defined enums
    //----------------------------------------------------------------------------
     
    SIMCONNECT_USER_ENUM SIMCONNECT_NOTIFICATION_GROUP_ID;     //client-defined notification group ID
    SIMCONNECT_USER_ENUM SIMCONNECT_INPUT_GROUP_ID;            //client-defined input group ID
    SIMCONNECT_USER_ENUM SIMCONNECT_DATA_DEFINITION_ID;        //client-defined data definition ID
    SIMCONNECT_USER_ENUM SIMCONNECT_DATA_REQUEST_ID;           //client-defined request data ID
     
    SIMCONNECT_USER_ENUM SIMCONNECT_CLIENT_EVENT_ID;           //client-defined client event ID
    SIMCONNECT_USER_ENUM SIMCONNECT_CLIENT_DATA_ID;            //client-defined client data ID
    SIMCONNECT_USER_ENUM SIMCONNECT_CLIENT_DATA_DEFINITION_ID; //client-defined client data definition ID
     
     
    //----------------------------------------------------------------------------
    //        Struct definitions
    //----------------------------------------------------------------------------
     
    #pragma pack(push, 1)
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV
    {
        DWORD   dwSize;         // record size
        DWORD   dwVersion;      // interface version
        DWORD   dwID;           // see SIMCONNECT_RECV_ID
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_EXCEPTION : 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
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_OPEN : public SIMCONNECT_RECV   // when dwID == SIMCONNECT_RECV_ID_OPEN
    {
        SIMCONNECT_STRING(    szApplicationName, 256);
        DWORD   dwApplicationVersionMajor;
        DWORD   dwApplicationVersionMinor;
        DWORD   dwApplicationBuildMajor;
        DWORD   dwApplicationBuildMinor;
        DWORD   dwSimConnectVersionMajor;
        DWORD   dwSimConnectVersionMinor;
        DWORD   dwSimConnectBuildMajor;
        DWORD   dwSimConnectBuildMinor;
        DWORD   dwReserved1;
        DWORD   dwReserved2;
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_QUIT : public SIMCONNECT_RECV   // when dwID == SIMCONNECT_RECV_ID_QUIT
    {
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_EVENT : public SIMCONNECT_RECV       // when dwID == SIMCONNECT_RECV_ID_EVENT
    {
        static const DWORD UNKNOWN_GROUP = DWORD_MAX;
        DWORD   uGroupID;
        DWORD   uEventID; 
        DWORD   dwData;       // uEventID-dependent context
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_EVENT_FILENAME : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_FILENAME
    {
        SIMCONNECT_STRING(    szFileName, MAX_PATH);   // uEventID-dependent context
        DWORD   dwFlags;
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_EVENT_OBJECT_ADDREMOVE : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_FILENAME
    {
        SIMCONNECT_SIMOBJECT_TYPE   eObjType;
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_EVENT_FRAME : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_FRAME
    {
        float   fFrameRate;
        float   fSimSpeed;
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_EVENT_MULTIPLAYER_SERVER_STARTED : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_MULTIPLAYER_SERVER_STARTED
    {
        // No event specific data, for now
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_EVENT_MULTIPLAYER_CLIENT_STARTED : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_MULTIPLAYER_CLIENT_STARTED
    {
        // No event specific data, for now
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_EVENT_MULTIPLAYER_SESSION_ENDED : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_MULTIPLAYER_SESSION_ENDED
    {
        // No event specific data, for now
    };
     
    // SIMCONNECT_DATA_RACE_RESULT
    SIMCONNECT_STRUCT SIMCONNECT_DATA_RACE_RESULT
    {
        DWORD   dwNumberOfRacers;                         // The total number of racers
        SIMCONNECT_GUID MissionGUID;                      // The name of the mission to execute, NULL if no mission
        SIMCONNECT_STRING( szPlayerName, MAX_PATH);       // The name of the player
        SIMCONNECT_STRING( szSessionType, MAX_PATH);      // The type of the multiplayer session: "LAN", "GAMESPY")
        SIMCONNECT_STRING( szAircraft, MAX_PATH);         // The aircraft type 
        SIMCONNECT_STRING( szPlayerRole, MAX_PATH);       // The player role in the mission
        double   fTotalTime;                              // Total time in seconds, 0 means DNF
        double   fPenaltyTime;                            // Total penalty time in seconds
        DWORD   dwIsDisqualified;                         // non 0 - disqualified, 0 - not disqualified
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_EVENT_RACE_END : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_RACE_END
    {
        DWORD   dwRacerNumber;                            // The index of the racer the results are for
        SIMCONNECT_DATA_RACE_RESULT RacerData;
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_EVENT_RACE_LAP : public SIMCONNECT_RECV_EVENT       // when dwID == SIMCONNECT_RECV_ID_EVENT_RACE_LAP
    {
        DWORD   dwLapIndex;                               // The index of the lap the results are for
        SIMCONNECT_DATA_RACE_RESULT RacerData;
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_SIMOBJECT_DATA : public SIMCONNECT_RECV           // when dwID == SIMCONNECT_RECV_ID_SIMOBJECT_DATA
    {
        DWORD   dwRequestID;
        DWORD   dwObjectID;
        DWORD   dwDefineID;
        DWORD   dwFlags;            // SIMCONNECT_DATA_REQUEST_FLAG
        DWORD   dwentrynumber;      // if multiple objects returned, this is number <entrynumber> out of <outof>.
        DWORD   dwoutof;            // note: starts with 1, not 0.          
        DWORD   dwDefineCount;      // data count (number of datums, *not* byte count)
        SIMCONNECT_DATAV(   dwData, dwDefineID, );             // data begins here, dwDefineCount data items
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE : public SIMCONNECT_RECV_SIMOBJECT_DATA           // when dwID == SIMCONNECT_RECV_ID_SIMOBJECT_DATA_BYTYPE
    {
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_CLIENT_DATA : public SIMCONNECT_RECV_SIMOBJECT_DATA    // when dwID == SIMCONNECT_RECV_ID_CLIENT_DATA
    {
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_WEATHER_OBSERVATION : public SIMCONNECT_RECV // when dwID == SIMCONNECT_RECV_ID_WEATHER_OBSERVATION
    {
        DWORD   dwRequestID;
        SIMCONNECT_STRINGV( szMetar);      // Variable length string whose maximum size is MAX_METAR_LENGTH
    };
     
    static const int SIMCONNECT_CLOUD_STATE_ARRAY_WIDTH = 64;
    static const int SIMCONNECT_CLOUD_STATE_ARRAY_SIZE = SIMCONNECT_CLOUD_STATE_ARRAY_WIDTH*SIMCONNECT_CLOUD_STATE_ARRAY_WIDTH;
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_CLOUD_STATE : public SIMCONNECT_RECV // when dwID == SIMCONNECT_RECV_ID_CLOUD_STATE
    {
        DWORD   dwRequestID;
        DWORD   dwArraySize;
        SIMCONNECT_FIXEDTYPE_DATAV(BYTE,    rgbData, dwArraySize, U1 /*member of UnmanagedType enum*/ , System::Byte /*cli type*/);
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_ASSIGNED_OBJECT_ID : public SIMCONNECT_RECV // when dwID == SIMCONNECT_RECV_ID_ASSIGNED_OBJECT_ID
    {
        DWORD   dwRequestID;
        DWORD   dwObjectID;
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_RESERVED_KEY : public SIMCONNECT_RECV // when dwID == SIMCONNECT_RECV_ID_RESERVED_KEY
    {
        SIMCONNECT_STRING(    szChoiceReserved, 30);
        SIMCONNECT_STRING(    szReservedKey, 50);
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_SYSTEM_STATE : public SIMCONNECT_RECV // when dwID == SIMCONNECT_RECV_ID_SYSTEM_STATE
    {
        DWORD   dwRequestID;
        DWORD   dwInteger;
        float   fFloat;
        SIMCONNECT_STRING(    szString, MAX_PATH);
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_CUSTOM_ACTION : public SIMCONNECT_RECV_EVENT
    {
        SIMCONNECT_GUID guidInstanceId;      // Instance id of the action that executed
        DWORD dwWaitForCompletion;           // Wait for completion flag on the action
        SIMCONNECT_STRINGV( szPayLoad);      // Variable length string payload associated with the mission action.  
    };
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_EVENT_WEATHER_MODE : public SIMCONNECT_RECV_EVENT
    {
        // No event specific data - the new weather mode is in the base structure dwData member.
    };
     
    // SIMCONNECT_RECV_FACILITIES_LIST
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_FACILITIES_LIST : public SIMCONNECT_RECV
    {
        DWORD   dwRequestID;
        DWORD   dwArraySize;
        DWORD   dwEntryNumber;  // when the array of items is too big for one send, which send this is (0..dwOutOf-1)
        DWORD   dwOutOf;        // total number of transmissions the list is chopped into
    };
     
    // SIMCONNECT_DATA_FACILITY_AIRPORT
    SIMCONNECT_REFSTRUCT SIMCONNECT_DATA_FACILITY_AIRPORT
    {
        SIMCONNECT_STRING(Icao, 9);     // ICAO of the object
        double  Latitude;               // degrees
        double  Longitude;              // degrees
        double  Altitude;               // meters   
    };
     
    // SIMCONNECT_RECV_AIRPORT_LIST
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_AIRPORT_LIST : 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*/);
    };
     
     
    // SIMCONNECT_DATA_FACILITY_WAYPOINT
    SIMCONNECT_REFSTRUCT SIMCONNECT_DATA_FACILITY_WAYPOINT : public SIMCONNECT_DATA_FACILITY_AIRPORT
    {
        float   fMagVar;                // Magvar in degrees
    };
     
    // SIMCONNECT_RECV_WAYPOINT_LIST
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_WAYPOINT_LIST : 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*/);
    };
     
    // SIMCONNECT_DATA_FACILITY_NDB
    SIMCONNECT_REFSTRUCT SIMCONNECT_DATA_FACILITY_NDB : public SIMCONNECT_DATA_FACILITY_WAYPOINT
    {
        DWORD   fFrequency;             // frequency in Hz
    };
     
    // SIMCONNECT_RECV_NDB_LIST
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_NDB_LIST : 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*/);
    };
     
    // SIMCONNECT_DATA_FACILITY_VOR
    SIMCONNECT_REFSTRUCT SIMCONNECT_DATA_FACILITY_VOR : public SIMCONNECT_DATA_FACILITY_NDB
    {
        DWORD   Flags;                  // SIMCONNECT_VOR_FLAGS
        float   fLocalizer;             // Localizer in degrees
        double  GlideLat;               // Glide Slope Location (deg, deg, meters)
        double  GlideLon;
        double  GlideAlt;
        float   fGlideSlopeAngle;       // Glide Slope in degrees
    };
     
    // SIMCONNECT_RECV_VOR_LIST
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_VOR_LIST : 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*/);
    };
     
    #ifdef ENABLE_SIMCONNECT_EXPERIMENTAL
     
    SIMCONNECT_REFSTRUCT SIMCONNECT_RECV_PICK : public SIMCONNECT_RECV // when dwID == SIMCONNECT_RECV_ID_RESERVED_KEY
    {
        HANDLE  hContext;
        DWORD   dwFlags;  //
        double  Latitude;   // degrees
        double  Longitude;  // degrees
        double  Altitude;   // feet   
        int     xPos; //reserved
        int     yPos; //reserved;
        DWORD   dwSimObjectID;
        HANDLE  hSceneryObject;
        DWORD   dwentrynumber;      // if multiple objects returned, this is number <entrynumber> out of <outof>.
        DWORD   dwoutof;            // note: starts with 1, not 0.          
    };
     
    #endif //ENABLE_SIMCONNECT_EXPERIMENTAL
     
     
    // SIMCONNECT_DATATYPE_INITPOSITION
    SIMCONNECT_STRUCT SIMCONNECT_DATA_INITPOSITION
    {
        double  Latitude;   // degrees
        double  Longitude;  // degrees
        double  Altitude;   // feet   
        double  Pitch;      // degrees
        double  Bank;       // degrees
        double  Heading;    // degrees
        DWORD   OnGround;   // 1=force to be on the ground
        DWORD   Airspeed;   // knots
    };
     
     
    // SIMCONNECT_DATATYPE_MARKERSTATE
    SIMCONNECT_STRUCT SIMCONNECT_DATA_MARKERSTATE
    {
        SIMCONNECT_STRING(    szMarkerName, 64);
        DWORD   dwMarkerState;
    };
     
    // SIMCONNECT_DATATYPE_WAYPOINT
    SIMCONNECT_STRUCT SIMCONNECT_DATA_WAYPOINT
    {
        double          Latitude;   // degrees
        double          Longitude;  // degrees
        double          Altitude;   // feet   
        unsigned long   Flags;
        double          ktsSpeed;   // knots
        double          percentThrottle;
    };
     
    // SIMCONNECT_DATA_LATLONALT
    SIMCONNECT_STRUCT SIMCONNECT_DATA_LATLONALT
    {
        double  Latitude;
        double  Longitude;
        double  Altitude;
    };
     
    // SIMCONNECT_DATA_XYZ
    SIMCONNECT_STRUCT SIMCONNECT_DATA_XYZ
    {
        double  x;
        double  y;
        double  z;
    };
     
    #pragma pack(pop)
     
    //----------------------------------------------------------------------------
    //        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
     
    SIMCONNECTAPI SimConnect_MapClientEventToSimEvent(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID, const char * EventName = "");
    SIMCONNECTAPI SimConnect_TransmitClientEvent(HANDLE hSimConnect, SIMCONNECT_OBJECT_ID ObjectID, SIMCONNECT_CLIENT_EVENT_ID EventID, DWORD dwData, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, SIMCONNECT_EVENT_FLAG Flags);
    SIMCONNECTAPI SimConnect_SetSystemEventState(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID, SIMCONNECT_STATE dwState);
    SIMCONNECTAPI SimConnect_AddClientEventToNotificationGroup(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, SIMCONNECT_CLIENT_EVENT_ID EventID, BOOL bMaskable = FALSE);
    SIMCONNECTAPI SimConnect_RemoveClientEvent(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, SIMCONNECT_CLIENT_EVENT_ID EventID);
    SIMCONNECTAPI SimConnect_SetNotificationGroupPriority(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, DWORD uPriority);
    SIMCONNECTAPI SimConnect_ClearNotificationGroup(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID);
    SIMCONNECTAPI SimConnect_RequestNotificationGroup(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, DWORD dwReserved = 0, DWORD Flags = 0);
    SIMCONNECTAPI 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);
    SIMCONNECTAPI SimConnect_ClearDataDefinition(HANDLE hSimConnect, SIMCONNECT_DATA_DEFINITION_ID DefineID);
    SIMCONNECTAPI 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);
    SIMCONNECTAPI SimConnect_RequestDataOnSimObjectType(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, SIMCONNECT_DATA_DEFINITION_ID DefineID, DWORD dwRadiusMeters, SIMCONNECT_SIMOBJECT_TYPE type);
    SIMCONNECTAPI SimConnect_SetDataOnSimObject(HANDLE hSimConnect, SIMCONNECT_DATA_DEFINITION_ID DefineID, SIMCONNECT_OBJECT_ID ObjectID, SIMCONNECT_DATA_SET_FLAG Flags, DWORD ArrayCount, DWORD cbUnitSize, void * pDataSet);
    SIMCONNECTAPI 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);
    SIMCONNECTAPI SimConnect_SetInputGroupPriority(HANDLE hSimConnect, SIMCONNECT_INPUT_GROUP_ID GroupID, DWORD uPriority);
    SIMCONNECTAPI SimConnect_RemoveInputEvent(HANDLE hSimConnect, SIMCONNECT_INPUT_GROUP_ID GroupID, const char * szInputDefinition);
    SIMCONNECTAPI SimConnect_ClearInputGroup(HANDLE hSimConnect, SIMCONNECT_INPUT_GROUP_ID GroupID);
    SIMCONNECTAPI SimConnect_SetInputGroupState(HANDLE hSimConnect, SIMCONNECT_INPUT_GROUP_ID GroupID, DWORD dwState);
    SIMCONNECTAPI SimConnect_RequestReservedKey(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID, const char * szKeyChoice1 = "", const char * szKeyChoice2 = "", const char * szKeyChoice3 = "");
    SIMCONNECTAPI SimConnect_SubscribeToSystemEvent(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID, const char * SystemEventName);
    SIMCONNECTAPI SimConnect_UnsubscribeFromSystemEvent(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID);
    SIMCONNECTAPI SimConnect_WeatherRequestInterpolatedObservation(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, float lat, float lon, float alt);
    SIMCONNECTAPI SimConnect_WeatherRequestObservationAtStation(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, const char * szICAO);
    SIMCONNECTAPI SimConnect_WeatherRequestObservationAtNearestStation(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, float lat, float lon);
    SIMCONNECTAPI SimConnect_WeatherCreateStation(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, const char * szICAO, const char * szName, float lat, float lon, float alt);
    SIMCONNECTAPI SimConnect_WeatherRemoveStation(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, const char * szICAO);
    SIMCONNECTAPI SimConnect_WeatherSetObservation(HANDLE hSimConnect, DWORD Seconds, const char * szMETAR);
    SIMCONNECTAPI SimConnect_WeatherSetModeServer(HANDLE hSimConnect, DWORD dwPort, DWORD dwSeconds);
    SIMCONNECTAPI SimConnect_WeatherSetModeTheme(HANDLE hSimConnect, const char * szThemeName);
    SIMCONNECTAPI SimConnect_WeatherSetModeGlobal(HANDLE hSimConnect);
    SIMCONNECTAPI SimConnect_WeatherSetModeCustom(HANDLE hSimConnect);
    SIMCONNECTAPI SimConnect_WeatherSetDynamicUpdateRate(HANDLE hSimConnect, DWORD dwRate);
    SIMCONNECTAPI SimConnect_WeatherRequestCloudState(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, float minLat, float minLon, float minAlt, float maxLat, float maxLon, float maxAlt, DWORD dwFlags = 0);
    SIMCONNECTAPI 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);
    SIMCONNECTAPI SimConnect_WeatherRemoveThermal(HANDLE hSimConnect, SIMCONNECT_OBJECT_ID ObjectID);
    SIMCONNECTAPI SimConnect_AICreateParkedATCAircraft(HANDLE hSimConnect, const char * szContainerTitle, const char * szTailNumber, const char * szAirportID, SIMCONNECT_DATA_REQUEST_ID RequestID);
    SIMCONNECTAPI SimConnect_AICreateEnrouteATCAircraft(HANDLE hSimConnect, const char * szContainerTitle, const char * szTailNumber, int iFlightNumber, const char * szFlightPlanPath, double dFlightPlanPosition, BOOL bTouchAndGo, SIMCONNECT_DATA_REQUEST_ID RequestID);
    SIMCONNECTAPI SimConnect_AICreateNonATCAircraft(HANDLE hSimConnect, const char * szContainerTitle, const char * szTailNumber, SIMCONNECT_DATA_INITPOSITION InitPos, SIMCONNECT_DATA_REQUEST_ID RequestID);
    SIMCONNECTAPI SimConnect_AICreateSimulatedObject(HANDLE hSimConnect, const char * szContainerTitle, SIMCONNECT_DATA_INITPOSITION InitPos, SIMCONNECT_DATA_REQUEST_ID RequestID);
    SIMCONNECTAPI SimConnect_AIReleaseControl(HANDLE hSimConnect, SIMCONNECT_OBJECT_ID ObjectID, SIMCONNECT_DATA_REQUEST_ID RequestID);
    SIMCONNECTAPI SimConnect_AIRemoveObject(HANDLE hSimConnect, SIMCONNECT_OBJECT_ID ObjectID, SIMCONNECT_DATA_REQUEST_ID RequestID);
    SIMCONNECTAPI SimConnect_AISetAircraftFlightPlan(HANDLE hSimConnect, SIMCONNECT_OBJECT_ID ObjectID, const char * szFlightPlanPath, SIMCONNECT_DATA_REQUEST_ID RequestID);
    SIMCONNECTAPI SimConnect_ExecuteMissionAction(HANDLE hSimConnect, const GUID guidInstanceId);
    SIMCONNECTAPI SimConnect_CompleteCustomMissionAction(HANDLE hSimConnect, const GUID guidInstanceId);
    SIMCONNECTAPI SimConnect_Close(HANDLE hSimConnect);
    SIMCONNECTAPI SimConnect_RetrieveString(SIMCONNECT_RECV * pData, DWORD cbData, void * pStringV, char ** pszString, DWORD * pcbString);
    SIMCONNECTAPI SimConnect_GetLastSentPacketID(HANDLE hSimConnect, DWORD * pdwError);
    SIMCONNECTAPI SimConnect_Open(HANDLE * phSimConnect, LPCSTR szName, HWND hWnd, DWORD UserEventWin32, HANDLE hEventHandle, DWORD ConfigIndex);
    SIMCONNECTAPI SimConnect_CallDispatch(HANDLE hSimConnect, DispatchProc pfcnDispatch, void * pContext);
    SIMCONNECTAPI SimConnect_GetNextDispatch(HANDLE hSimConnect, SIMCONNECT_RECV ** ppData, DWORD * pcbData);
    SIMCONNECTAPI SimConnect_RequestResponseTimes(HANDLE hSimConnect, DWORD nCount, float * fElapsedSeconds);
    SIMCONNECTAPI SimConnect_InsertString(char * pDest, DWORD cbDest, void ** ppEnd, DWORD * pcbStringV, const char * pSource);
    SIMCONNECTAPI SimConnect_CameraSetRelative6DOF(HANDLE hSimConnect, float fDeltaX, float fDeltaY, float fDeltaZ, float fPitchDeg, float fBankDeg, float fHeadingDeg);
    SIMCONNECTAPI SimConnect_MenuAddItem(HANDLE hSimConnect, const char * szMenuItem, SIMCONNECT_CLIENT_EVENT_ID MenuEventID, DWORD dwData);
    SIMCONNECTAPI SimConnect_MenuDeleteItem(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID MenuEventID);
    SIMCONNECTAPI SimConnect_MenuAddSubItem(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID MenuEventID, const char * szMenuItem, SIMCONNECT_CLIENT_EVENT_ID SubMenuEventID, DWORD dwData);
    SIMCONNECTAPI SimConnect_MenuDeleteSubItem(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID MenuEventID, const SIMCONNECT_CLIENT_EVENT_ID SubMenuEventID);
    SIMCONNECTAPI SimConnect_RequestSystemState(HANDLE hSimConnect, SIMCONNECT_DATA_REQUEST_ID RequestID, const char * szState);
    SIMCONNECTAPI SimConnect_SetSystemState(HANDLE hSimConnect, const char * szState, DWORD dwInteger, float fFloat, const char * szString);
    SIMCONNECTAPI SimConnect_MapClientDataNameToID(HANDLE hSimConnect, const char * szClientDataName, SIMCONNECT_CLIENT_DATA_ID ClientDataID);
    SIMCONNECTAPI SimConnect_CreateClientData(HANDLE hSimConnect, SIMCONNECT_CLIENT_DATA_ID ClientDataID, DWORD dwSize, SIMCONNECT_CREATE_CLIENT_DATA_FLAG Flags);
    SIMCONNECTAPI SimConnect_AddToClientDataDefinition(HANDLE hSimConnect, SIMCONNECT_CLIENT_DATA_DEFINITION_ID DefineID, DWORD dwOffset, DWORD dwSizeOrType, float fEpsilon = 0, DWORD DatumID = SIMCONNECT_UNUSED);
    SIMCONNECTAPI SimConnect_ClearClientDataDefinition(HANDLE hSimConnect, SIMCONNECT_CLIENT_DATA_DEFINITION_ID DefineID);
    SIMCONNECTAPI 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);
    SIMCONNECTAPI 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);
    SIMCONNECTAPI SimConnect_FlightLoad(HANDLE hSimConnect, const char * szFileName);
    SIMCONNECTAPI SimConnect_FlightSave(HANDLE hSimConnect, const char * szFileName, const char * szTitle, const char * szDescription, DWORD Flags);
    SIMCONNECTAPI SimConnect_FlightPlanLoad(HANDLE hSimConnect, const char * szFileName);
    SIMCONNECTAPI SimConnect_Text(HANDLE hSimConnect, SIMCONNECT_TEXT_TYPE type, float fTimeSeconds, SIMCONNECT_CLIENT_EVENT_ID EventID, DWORD cbUnitSize, void * pDataSet);
    SIMCONNECTAPI SimConnect_SubscribeToFacilities(HANDLE hSimConnect, SIMCONNECT_FACILITY_LIST_TYPE type, SIMCONNECT_DATA_REQUEST_ID RequestID);
    SIMCONNECTAPI SimConnect_UnsubscribeToFacilities(HANDLE hSimConnect, SIMCONNECT_FACILITY_LIST_TYPE type);
    SIMCONNECTAPI SimConnect_RequestFacilitiesList(HANDLE hSimConnect, SIMCONNECT_FACILITY_LIST_TYPE type, SIMCONNECT_DATA_REQUEST_ID RequestID);
     
    #endif // _SIMCONNECT_H_

  14. #34
    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
    La référence SDK se trouve ici :

    https://docs.flightsimulator.com/htm...onnect_SDK.htm

  15. #35
    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
    Je pense que dans votre cas, le plus simple serait d'écrire une DLL qui encapsule le code C/C++ et utiliser PostMessage pour communiquer avec l'application WinDev.
    Dans ce cas, il faudrait prévoir une fonction pour passer le handle de la fenêtre WinDev.
    Je vais voir ce que je peux faire pour transformer l'application console C/C++ en DLL, de cette façon vous pourrez récupérer uniquement les infos dont vous avez besoin.
    Le problème c'est de faire fonctionner le code à l'aveugle, car je n'ai pas FS, mais on doit pouvoir au moins tester le principe.

  16. #36
    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
    Je peux vous exporter les paramètres de Struct1

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct Struct1 {
        char    title[256];
        double  kohlsmann;
        double  altitude;
        double  latitude;
        double  longitude;
    };

    Est-ce que çà vous convient ?

    Ma Sim.dll exporte 2 fonctions à savoir :
    ExportC BOOL Sim_Connect(HWND hParent); Le point d'entrée qui vous permet de passer le handle de la fenêtre WinDev.
    ExportC void Sim_Quit(); Pour quitter.

    Concernant le handle de fenêtre il est préférable de créer une fenêtre bas niveau, comme dans mon exemple "Mini API code".
    https://depot.pcsoft.fr/resource.awp...;mini-api-code

    Concernant le message je propose d'utiliser WM_USER + SIMCONNECT_RECV_ID_SIMOBJECT_DATA, de la façon suivante :

    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
    void CALLBACK MyDispatchProcRD(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext) {
        HRESULT hr;
     
        switch(pData->dwID)     {
     
            case SIMCONNECT_RECV_ID_SIMOBJECT_DATA:
            {
                SIMCONNECT_RECV_SIMOBJECT_DATA* pObjData = (SIMCONNECT_RECV_SIMOBJECT_DATA*)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
                        StringCchPrintf(gP.zAf, strSize(gP.zAf), L"\ObjectID=%d  Title=\"%s\"\nLat=%f  Lon=%f  Alt=%f  Kohlsman=%.2f", ObjectID, pS->title, pS->latitude, pS->longitude, pS->altitude, pS->kohlsmann);
                        zTrace(gP.zAf);
                        if (IsWindow(gP.hParent)) {
                            PostMessage(gP.hParent, WM_USER + SIMCONNECT_RECV_ID_SIMOBJECT_DATA, NULL, (LPARAM) pS);
                        }
                    }
                    break;
                }
     
                default:
                    break;
                }
                break;
            }

    Pour créer la DLL j'ai besoin de SimConnect.lib

  17. #37
    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,

    C'est très gentil pour tout ce que vous faites pour m'aider.

    Pour la dll d'interfaçage, je ne suis pas certain que ce soit utile car, même si c'est une excellente idée, il n'en reste pas moins que dans mes interrogations je veux avoir accès à n'importe quelle "SimVar" (variable de simulation). De plus je n'en suis qu'à la récupération de données. Il me reste ensuite les Event (commandes à envoyer au simulateur).
    Quant à la fenêtre de bas niveau, je vais m'en voir pour créer tout ce que j'ai à faire.

    Pour que tu saches bien ma finalité, voici ce que je voudrais faire :
    Le but est de créer une sorte de "radio VHF" en streaming audio avec la déformation vocal d'une telle radio. Pour cela il me faut récupérer les fréquences affichées dans le simulateur (en général il y a 2 radios). Avec ces fréquences, je crée des canaux de stream via un serveur Sturn (ou autre principe si je trouve mieux à ce moment là). ainsi les pilotes virtuels peuvent contacter un contrôle aérien pour la régulation et la gestion d'espacement des avions via le contrôleur (comme en réel - je connais bien car je suis un ex-contrôleur aérien). Mais il me faut aussi connaitre les positions des intervenants (pilotes et contrôleurs) pour calculer la courbure terrestres et ainsi appliqué une dégradation audio si la distance atteint une certains limite. De plus il y a certaines conditions à gérer par rapport au type d'avion.
    Tout cela pour dire que je dois pouvoir avoir accès à n'importe quelle donnée et je dois pouvoir agir dans les deux sens. Certes, il n'est pas forcément utile d'avoir une fenêtre très sophistiquée puisqu'elle pourrait à l'extrème être réduit au stricte minimum, mais pour les utilisateurs il faut qu'il puissent voir si tout fonctionne correctement.

    J'ai été un peu long, désolé

    Tout cela pour dire également que je suis pas loin du tout puisque j'arrive à converser avec le simulateur via SimConnect.dll et Windev.
    Mes tests, en passant pas C++, fonctionnent très bien en mode console.

    Je suis certain qu'il y a juste un petit soucis dans la manière de passer les variables via SimConnect et de la récupérer.
    Pour ce faire, il y a deux façons principales : avec ou sans CallBack.
    Quand je fais des essais, avec ou sans CallBack, j'ai exactement les même réponses. Et pour envoyer les demandes via l'API, on envoie des variables directement sans pointeur d'après le SDK.
    Ceci dit, je ne suis pas certain car lorsque je demande, par exemple, 2 valeurs (SimVar du simulateur), j'ai 2 réponses correctes (les résultat m'envoie un S_OK) mais je n'arrive pas à extraire correctement les valeurs (problème de récupération de variables avec les pointeurs probablement). Ensuite toutes les réponses sont retournées avec un E_FAIL (erreur).

    Si vous voulez mon projet Windev concernant la partie SimConnect, je peux épurer pour garder le minimum. Je suis en WD26.

    Merci

  18. #38
    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
    Voici le SDK complet :

    https://fromsmash.com/SimConnect-SDK

    Et voici les exemple Simconnect fournis avec :

    https://fromsmash.com/SimConnect-Samples

  19. #39
    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
    Avec SimConnect.lib, j'ai été capable de créer la DLL.
    Concernant le handle de fenêtre c'est surtout pour avoir la main sur la callback, et ainsi récupérer plus facilement les messages afin de détecter ce qui ne fonctionne pas dans votre code.
    Par chance j'ai aussi une version 26, je peux donc implanter la callback si vous me fournissez les sources (en anglais svp).

    Au pire je peux juste modifier mon projet "Mini API code" qui comporte un handle window natif et une callback, car comme vous le savez, je n'ai pas FS.
    Je vais vous bricoler en 26 un petit projet juste pour vérifier qu'on récupère bien les bonnes valeurs.

  20. #40
    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 le projet MiniSIM en version 26, pour vérifier qu'on récupère bien les bons paramètres dans la callback.

    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
    // Function callback utilisée par la fenêtre principale.
    FUNCTION WndProc(LOCAL hWnd is system int, LOCAL uMsg is unsigned int, LOCAL wParam is system int, LOCAL lParam is system int)
    ps is PAINTSTRUCT;
    nRet is int = -1; // -1 means let Windows perform the default message processing
    hDC is system int;
    
    SWITCH uMsg
    	CASE WM_CREATE: // Sart SimConnect
    		bRet is boolean = API(SIM, "Sim_Connect", hWnd);
    		Trace(bRet) // TRUE means OK
    	
    	CASE SIMCONNECT_RECV_ID_SIMOBJECT_DATA: // = WM_USER + 8
    		pSim is Struct1; VariableReset(pSim);
    		Transfer(&pSim, lParam, Dimension(pSim));
    		Trace(pSim.title, pSim.Kohlsmann, pSim.altitude, pSim.latitude, pSim.longitude);
    		nRet = 0;
    	
    	CASE WM_GETMINMAXINFO:
    		pMM is MINMAXINFO
    		Transfer(&pMM, lParam, Dimension(pMM));
    		pMM.ptMinTrackSize.x = gP.MinTrackSizeW;
    		pMM.ptMinTrackSize.y = gP.MinTrackSizeH;
    		Transfer(lParam, &pMM, Dimension(pMM));
    		
    	CASE WM_SIZE:
    		InvalidateRect(hWnd, Null, True);
    		nRet = 0;
    		
    	CASE WM_COMMAND:
    		wmId is int    = LOINT(wParam);
    		wmEvent is int = HIINT(wParam);
    //		SWITCH (wmId)
    //
    //		END	
    		nRet = 0;
    		
    	CASE WM_PAINT:
    		hDC = BeginPaint(hWnd, ps);
    		// Paint the window content here
    		EndPaint(hWnd, ps);
    		nRet = 0;
    				
    	CASE WM_DESTROY:
    		API(SIM, "Sim_Quit")
    		PostQuitMessage(0);
    		nRet = 0;
    		
    	OTHER CASE:
    END
    
    IF nRet = -1 THEN
    	nRet = DefWindowProc(hWnd, uMsg, wParam, lParam);
    END
    RESULT nRet;
    et la structure correspondante pour SIMCONNECT_RECV_ID_SIMOBJECT_DATA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Struct1 is Structure
    	title is string ASCIIZ on 256
    	Kohlsmann is real
    	altitude is real
    	latitude is real
    	longitude is real
    END
    Fichiers attachés Fichiers attachés

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