Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать, чтобы функция возвращала массив char? 
:(
    Опции темы
=Женек=
Дата 11.2.2012, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: 1
Всего: 1



Господа, помогите.
Была конструкция:
Код

    recieve_ok=0;
    while ((recieve_ok==0)&& (time<Timeout))
    //while (recieve_ok==0)
    {
      time++;
      //Application->ProcessMessages();
      USBStat=FT_GetStatus(hUSB,&RxBytes,&TxBytes,&EventDWord);
        if (RxBytes > 0)
         {
           USBStat=FT_Read(hUSB,RxBuffer,RxBytes,&dwBytesReceived);
             if (!USBStat == FT_OK)
                 {
                  USBErr(USBStat);
                  return;
                  };
        RxBuffer[RxBytes]=0;
       RichEdit1->Lines->Add(AnsiString((const char*)RxBuffer));
       recieve_ok=1;
      }
    }


В Richedit писалось содержимое RxBuffer.
Хочу запихнуть все это в функцию:
Пока работает только с одним байтом, попытка заменить байт на буфер приводит к ошибке:
Код

unsigned charх[8] TForm1::Recieved()
{
 unsigned int i,j,recieve_ok,tries;
 unsigned long int Timeout,time;
 unsigned char RxBuffer[8],TxBuffer[8];
 DWORD EventDWord,dwBytesToWrite,dwBytesWritten,dwBytesReceived,RxBytes,TxBytes;

 Timeout=9000000;

    recieve_ok=0;
    while ((recieve_ok==0)&& (time<Timeout))
  //    while (recieve_ok==0)
    {
      time++;
      Application->ProcessMessages();
      USBStat=FT_GetStatus(hUSB,&RxBytes,&TxBytes,&EventDWord);
        if (RxBytes > 0)
         {
           USBStat=FT_Read(hUSB,RxBuffer,RxBytes,&dwBytesReceived);
             if (!USBStat == FT_OK)
                 {
                  USBErr(USBStat);
                  return -1;
                  };
       RxBuffer[RxBytes]=0;
       recieve_ok=1;
       return RxBuffer;
      }
    }
     if (time>=Timeout) return -2;

}



Как объявить?
PM MAIL   Вверх
Dem_max
Дата 11.2.2012, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Код

unsigned char RxBuffer[8];

unsigned char * TForm1::Recieved()
{
 unsigned int i,j,recieve_ok,tries;
 unsigned long int Timeout,time;
 unsigned char TxBuffer[8];
 DWORD EventDWord,dwBytesToWrite,dwBytesWritten,dwBytesReceived,RxBytes,TxBytes;

 Timeout=9000000;

    recieve_ok=0;
    while ((recieve_ok==0)&& (time<Timeout))
  //    while (recieve_ok==0)
    {
      time++;
      Application->ProcessMessages();
      USBStat=FT_GetStatus(hUSB,&RxBytes,&TxBytes,&EventDWord);
        if (RxBytes > 0)
         {
           USBStat=FT_Read(hUSB,RxBuffer,RxBytes,&dwBytesReceived);
             if (!USBStat == FT_OK)
                 {
                  USBErr(USBStat);
                  return -1;
                  };
       RxBuffer[RxBytes]=0;
       recieve_ok=1;
       return RxBuffer;
      }
    }
     if (time>=Timeout) return -2;

}



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
=Женек=
Дата 11.2.2012, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: 1
Всего: 1



Код

unsigned char * TForm1::Recieved()
{
 unsigned int i,j,recieve_ok,tries;
 unsigned long int Timeout,time;
 unsigned char RxBuffer[8],TxBuffer[8];
 DWORD EventDWord,dwBytesToWrite,dwBytesWritten,dwBytesReceived,RxBytes,TxBytes;

 Timeout=9000000;

    recieve_ok=0;
    while ((recieve_ok==0)&& (time<Timeout))
  //    while (recieve_ok==0)
    {
      time++;
      Application->ProcessMessages();
      USBStat=FT_GetStatus(hUSB,&RxBytes,&TxBytes,&EventDWord);
        if (RxBytes > 0)
         {
           USBStat=FT_Read(hUSB,RxBuffer,RxBytes,&dwBytesReceived);
             if (!USBStat == FT_OK)
                 {
                  USBErr(USBStat);
                  return "error";
                  };
       RxBuffer[RxBytes]=0;
       recieve_ok=1;
       return RxBuffer;
      }
    }
     if (time>=Timeout)  return "timeout";

}


Как мне прочитать строку "timeout", еcли функция ее вернет?
Так 
Код

 received_byte=Recieved();
  if (recieved_byte=="timeout") RichEdit1->Lines->Add("Нет приглашения от контроллера");



не получается
PM MAIL   Вверх
SVN74
Дата 11.2.2012, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 11
Всего: 18



Нет необходимости писать unsigned char , - можно просто char...
received_byte=Recieved(); 
Если использовать возврат по указателю, то сравнивать строки надо через   -  strcmp...
Ну а если возвращать как String , тогда можно сравнивать и так 
  if (recieved_byte=="timeout") 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0705 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.