- Messages
- 1
- Country

Hello,
I have a very simple windows from application. I can recaive data and update my form without a problem but when I try to update any data from my form it only executes once and get an excemption on the second update. Excemption 19 which means →
SIMCONNECT_EXCEPTION_INVALID_DATA_SIZE
Specifies that the size of the data provided is not what is expected. This can occur when the size of a
structure provided does not match the size given, or a null string entry is made for a menu or submenu entry text, or data with a size of zero is added to a data definition. It can also occur with an
invalid request to SimConnect_CreateClientData
Can somebody have alook and tell me what have I missed. I am not very fluent with c# as you might see.
The related problem is under “private void chkStrobe_CheckedChanged”
Here is my full code:
I have a very simple windows from application. I can recaive data and update my form without a problem but when I try to update any data from my form it only executes once and get an excemption on the second update. Excemption 19 which means →
SIMCONNECT_EXCEPTION_INVALID_DATA_SIZE
Specifies that the size of the data provided is not what is expected. This can occur when the size of a
structure provided does not match the size given, or a null string entry is made for a menu or submenu entry text, or data with a size of zero is added to a data definition. It can also occur with an
invalid request to SimConnect_CreateClientData
Can somebody have alook and tell me what have I missed. I am not very fluent with c# as you might see.
The related problem is under “private void chkStrobe_CheckedChanged”
Here is my full code:
using System;using System.Drawing;using System.Windows.Forms;using NAudio.Wave;// Add these two statements to all SimConnect clientsusing Microsoft.FlightSimulator.SimConnect;using System.Runtime.InteropServices;using System.Diagnostics;namespace AutoPilot_by_KB{ public partial class Form1 : Form { private Microsoft.FlightSimulator.SimConnect.SimConnect my_simconnect; private string output; private int response; const int WM_USER_SIMCONNECT = 0x402; bool soundPlay = true; WaveOutEvent outputPlayer = new WaveOutEvent(); AudioFileReader alert; string audioFile = "10Kt.mp3"; private const uint EVENT_ID_STROBE = 1; private const uint EVENT_ID_BEACON = 2; private const string EVENT_NAME_STROBE = "L:S_OH_EXT_LT_STROBE"; private const string EVENT_NAME_BEACON = "L:S_OH_EXT_LT_BEACON"; private enum DATA_REQUESTS { REQUEST_1 } private enum DEFINITIONS { Struct1, Struct2 } public Form1() { response = 1; output = ""; InitializeComponent(); setButtons(true, false); } private void btnConnect_Click(object sender, EventArgs e) { if (my_simconnect == null) { try { my_simconnect = new SimConnect("Managed Data Request", this.Handle, WM_USER_SIMCONNECT, null, 0); setButtons(false, true); initDataRequest(); timer1.Enabled = true; } catch (COMException) { txtStatus.Text = "Unable to connect to sim"; } } else { txtStatus.Text = "Error - try again"; closeConnection(); setButtons(true,false); timer1.Enabled = false; } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] struct Struct1 { //[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public double planeAltitude; public double lightTaxi; public double lightStrobe; public double lightBeacon; public double lightWing; public double lightNav; public double lightRunway; public double lightLanding; public double xpdrOperation; public double xpdrTARA; public double xpdrALLABV; public double parkingBrake; public double Speed; } private void initDataRequest() { try { my_simconnect.OnRecvOpen += new SimConnect.RecvOpenEventHandler(simconnect_OnRecvOpen); my_simconnect.OnRecvQuit += new SimConnect.RecvQuitEventHandler(simconnect_OnRecvQuit); my_simconnect.OnRecvException += new SimConnect.RecvExceptionEventHandler(simconnect_OnRecvException); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "Plane Altitude", "feet", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "L:S_OH_EXT_LT_NOSE", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "L:S_OH_EXT_LT_STROBE", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "L:S_OH_EXT_LT_BEACON", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "L:S_OH_EXT_LT_WING", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "L:S_OH_EXT_LT_NAV_LOGO", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "L:S_OH_EXT_LT_RWY_TURNOFF", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "L:S_OH_EXT_LT_LANDING_L", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "L:S_XPDR_OPERATION", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "L:S_XPDR_MODE", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "L:S_TCAS_RANGE", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "L:S_MIP_PARKING_BRAKE", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.AddToDataDefinition(DEFINITIONS.Struct1, "GROUND VELOCITY", "knots", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.RegisterDataDefineStruct<Struct1>(DEFINITIONS.Struct1); my_simconnect.OnRecvSimobjectDataBytype += new SimConnect.RecvSimobjectDataBytypeEventHandler(simconnect_OnRecvSimobjectDataBytype); } catch (COMException exception1) { displayText(exception1.Message); } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] struct Struct2 { //[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public double lightStrobe; //public int squawk; } private void chkStrobe_CheckedChanged(object sender, EventArgs e) { uint val = 0; Struct2 s2 = new Struct2(); switch (chkStrobe.Checked) { case true: val = 2; break; case false: val = 0; break; } s2.lightStrobe = val; my_simconnect.AddToDataDefinition(DEFINITIONS.Struct2, "L:S_OH_EXT_LT_STROBE", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED); my_simconnect.RegisterDataDefineStruct<Struct2>(DEFINITIONS.Struct2); try { my_simconnect.SetDataOnSimObject(DEFINITIONS.Struct2, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_DATA_SET_FLAG.DEFAULT, s2); } catch (Exception ex) { Debug.WriteLine(ex); } } private void playAlert() { string myPath = audioFile; outputPlayer = new WaveOutEvent(); alert = new AudioFileReader(myPath); outputPlayer.Init(alert); outputPlayer.Play(); } private void simconnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data) { if (data.dwRequestID == 0) { Struct1 struct1 = (Struct1)data.dwData[0]; txtAltitude.Text = struct1.planeAltitude.ToString("F0"); txtSpeed.Text = struct1.Speed.ToString("F0"); switch (struct1.parkingBrake) { case 0: btnParkingBrake.ForeColor = Color.Red; break; case 1: btnParkingBrake.ForeColor = Color.Green; break; } switch (struct1.xpdrTARA) { case 0: chkTARA.Checked = false; break; case 2: chkTARA.Checked = true; break; } switch (struct1.xpdrALLABV) { case 1: chkALLABV.Checked = true; break; case 2: chkALLABV.Checked = false; break; } switch (struct1.lightStrobe) { case 0: chkStrobe.Checked = false; break; case 2: chkStrobe.Checked = true; break; } chkBeacon.Checked = Convert.ToBoolean(struct1.lightBeacon); chkWing.Checked = Convert.ToBoolean(struct1.lightWing); switch (struct1.lightNav) { case 0: chkNavigation.Checked = false; break; case 1: chkNavigation.Checked = true; break; } chkRunway.Checked = Convert.ToBoolean(struct1.lightRunway); switch (struct1.lightTaxi) { case 0: chkTaxi.Checked = false; chkTakeoff.Checked = false; break; case 1: chkTaxi.Checked = true; chkTakeoff.Checked = false; break; case 2: chkTaxi.Checked = false; chkTakeoff.Checked = true; break; } switch (struct1.lightLanding) { case 0: chkLanding.Checked = false; break; case 1: chkLanding.Checked = false; break; case 2: chkLanding.Checked = true; break; } double double02 = struct1.planeAltitude; } else { txtAltitude.Text = ""; } } private void setButtons(bool bConnect, bool bDisconnect) { btnConnect.Enabled = bConnect; btnDisconnect.Enabled = bDisconnect; } private void closeConnection() { if (my_simconnect != null) { my_simconnect.Dispose(); my_simconnect = null; txtStatus.Text = "Connection closed"; } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { closeConnection(); timer1.Enabled = false; } private void btnDisconnect_Click(object sender, EventArgs e) { closeConnection(); setButtons(true, false); timer1.Enabled = false; txtStatus.Text = "Connection closed"; resetFields(); } private void resetFields() { txtAltitude.Text = ""; chkBeacon.Checked = false; chkLanding.Checked = false; chkNavigation.Checked = false; chkRunway.Checked = false; chkStrobe.Checked = false; chkTakeoff.Checked = false; chkTaxi.Checked = false; chkWing.Checked = false; } protected override void DefWndProc(ref Message m) { if (m.Msg == WM_USER_SIMCONNECT) { if (my_simconnect != null) { my_simconnect.ReceiveMessage(); } } else { base.DefWndProc(ref m); } } private void displayText(string s) { output = output.Substring(output.IndexOf("\n") + 1); object obj1 = output; output = string.Concat(new object[] { obj1, "\n", response++, ": ", s }); txtStatus.Text = output; } private void simconnect_OnRecvException(SimConnect sender, SIMCONNECT_RECV_EXCEPTION data) { txtStatus.Text = "Exception received: " + ((uint)data.dwException); } private void simconnect_OnRecvOpen(SimConnect sender, SIMCONNECT_RECV_OPEN data) { txtStatus.Text = "Connected to sim"; } private void simconnect_OnRecvQuit(SimConnect sender, SIMCONNECT_RECV data) { txtStatus.Text = "Sim as exited"; closeConnection(); timer1.Enabled = false; } private void timer1_Tick(object sender, EventArgs e) { my_simconnect.RequestDataOnSimObjectType(DATA_REQUESTS.REQUEST_1, DEFINITIONS.Struct1, 0, SIMCONNECT_SIMOBJECT_TYPE.USER); //txtStatus.Text = "Request sent..."; } private void Form1_Load(object sender, EventArgs e) { } }}
