FSX | C# | FSUIPC SDK | Programming | Программирование — Панели и приборы

1 2

-«С протоколами связи и прошивками микроконтроллеров знакомы?»

не, не моя тема

Может кто подсказать, как получить название самолета? Оно типа string. Я не понимаю как его получить. Пробую конверт то стринг, результат на скрине.

Сама переменная:

Spoiler

 

Код получения данных:

Spoiler

 

Что в итоге:

Spoiler

Сообщение отредактировано Andreypilot1: 15 June 2016 — 04:02

API fsuipc никогда не изучал. нет надобности.

По этому ничего конкретного сказать не могу.

Но меня смущает название переменной dwResult.

Это явно — число.

Обычно, когда переменная названа  — dwResult, она несет в себе некий числовой код.

Код ошибки, например, индекс в таблице строк, ID переменной, ну и т.д.

Вот Вы и получаете число, преобразованное в строку.

 

 

P.S.

Наверное стоит погуглить.

Я сейчас ткнул в Гугл и сразу нашел вот такое:

int typeToken = 0;
fsuipc.FSUIPC_Read(0x3D00, 256, ref typeToken, ref dwResult);
fsuipc.FSUIPC_Process(ref dwResult);
byte[] type = new byte[256];
if (fsuipc.FSUIPC_Get(ref typeToken, 256, ref type))
{
   string tmp = System.Text.Encoding.ASCII.GetString(type).TrimEnd('');
   if(tmp.Length > 1)
      current_aircraft = tmp;
}

Должно быть, что-то вроде этого.

 

Здесь использует метод с таким же именем — fsuipc.FSUIPC_Get, но с другой сигнатурой.

Тут уже используются три параметра.

Т.е., существует несколько перегруженных методов для разных случаев применения.

Сообщение отредактировано serg_p: 16 June 2016 — 23:25

API fsuipc никогда не изучал. нет надобности.
По этому ничего конкретного сказать не могу.
Но меня смущает название переменной dwResult.
Это явно — число.
Обычно, когда переменная названа  — dwResult, она несет в себе некий числовой код.
Код ошибки, например, индекс в таблице строк, ID переменной, ну и т.д.
Вот Вы и получаете число, преобразованное в строку.
 
 
P.S.
Наверное стоит погуглить.
Я сейчас ткнул в Гугл и сразу нашел вот такое:

int typeToken = 0;
fsuipc.FSUIPC_Read(0x3D00, 256, ref typeToken, ref dwResult);
fsuipc.FSUIPC_Process(ref dwResult);
byte[] type = new byte[256];
if (fsuipc.FSUIPC_Get(ref typeToken, 256, ref type))
{
   string tmp = System.Text.Encoding.ASCII.GetString(type).TrimEnd('');
   if(tmp.Length > 1)
      current_aircraft = tmp;
}

Должно быть, что-то вроде этого.
 
Здесь использует метод с таким же именем — fsuipc.FSUIPC_Get, но с другой сигнатурой.
Тут уже используются три параметра.
Т.е., существует несколько перегруженных методов для разных случаев применения.

 

Большое спасибо, все работает :)
Я немного нуб в этом. Но опять же, когда дело доходит до получения данных типа string, другим словом, не числовых, я стопорюсь. Еще один вопрос, как теперь получить ICAO код ближайшего аэропорта.

 

Spoiler

 

Как я понял по этой кодировке, делать нужно тоже самое, только сменить 256 бит на 32?

 

Нашел это решение, но у меня какие-то проблемы с 1 строчкой, там где Offset. Он подсвечивает красным, говоря, что пропущена ссылка на директорию и какой-то using. Но все usingи, которые нужно, указаны. Может я не туда пихаю что-то

Spoiler

Сообщение отредактировано Andreypilot1: 11 July 2016 — 15:18

result = fsuipc.FSUIPC_Read(0x0658, 4, ref token, ref dwResult);
                    result = fsuipc.FSUIPC_Process(ref dwResult);
                    byte[] icao = new byte[4];
                    result = fsuipc.FSUIPC_Get(ref token, 4, ref icao);
                    if (result)
                    {
                        string icaoname = System.Text.Encoding.ASCII.GetString(icao);
                    }

1 2