Как передать структуру из одного объекта в другой - страница 3

 
Mihail Marchukajtes:

Коллеги помогите чайнику.

Есть функция в которую нужно передавать одну из 10 структур в зависимости от условия, где в процессе работы будет происходить её заполнение данными. Описание структур выглядет так

Скажите они описаны правильно?

А вот так вызываю функцию где в переменную DataStruc и должна передаватся выбранная струкутра, однако компилятор выдаёт ошибку, не могу понять как это сделать???

Структура это тип.
Вы описали структуру и назвали её Acum.
Acum теперь переменная типа структура.
Объявляя параметр функции, нужно использовать этот тип, а не struct.

 
Roman:

Структура это тип.
Вы описали структуру и назвали её Acum.
Acum теперь переменная типа структура.
Объявляя параметр функции, нужно использовать этот тип, а не struct.

УРРРААААА ПОЛУЧИЛОСЬ!!! Вот ты шаровар конкретный. Спасибо, но скорее это я лошёк о чём собственно и речь что порой не знаю каких то элементарных весчей что приводит к лютой потере времени. А ларчик то просто открывался. Признаюсь в первые пользуюсь структурами. Век живи век учись. Я так и думал каким это образом передать в функцию что бы структура структуры была именно передана. Благодарствую серый ёж :-)))))
 

Рома, тогда вот тебе ещё вопрос на вскидку. Чтоб не расслаблялся. Шучу :-)

Пишущий советник открывает файл для записи раз в минуту. Скажи существует ли флаг для файла что он уже открыт в данный момент другим советником??? Второй советник читает данные из файла и при инициализации нужно убедится не происходит ли запись файла в данный момент... Спасибо!!!!

 
Mihail Marchukajtes:

Рома, тогда вот тебе ещё вопрос на вскидку. Чтоб не расслаблялся. Шучу :-)

Пишущий советник открывает файл для записи раз в минуту.
Скажи существует ли флаг для файла что он уже открыт в данный момент другим советником???
Второй советник читает данные из файла и при инициализации нужно убедится не происходит ли запись файла в данный момент... Спасибо!!!!

Из документации к FileOpen

Возвращаемое значение
В случае успешного открытия функция возвращает хэндл файла, который затем используется для доступа к данным файла. В случае неудачи возвращает INVALID_HANDLE.

Выведи хэндл, в глобальную переменную терминала, и проверяй её, есть хэндл или нет.
И всегда после обращения к файлу, закрывай его.

 
Roman:

Структура это тип.
Вы описали структуру и назвали её Acum.
Acum теперь переменная типа структура.
Объявляя параметр функции, нужно использовать этот тип, а не struct.

Спасибо, не догадывался, что структура, как и класс это тип данных
 
Roman:

Из документации к FileOpen

Возвращаемое значение
В случае успешного открытия функция возвращает хэндл файла, который затем используется для доступа к данным файла. В случае неудачи возвращает INVALID_HANDLE.

Выведи хэндл, в глобальную переменную терминала, и проверяй её, есть хэндл или нет.
И всегда после обращения к файлу, закрывай его.

Рома. ну то есть нужно сделать так? Поправь если ошибаюсь.

При открытии файла переменная отвечающия за хендел становится труе и прежде чем считать файл нужно дождаться значение переменной на фальше которое установится при закрытии файла пишущим советником. так это или я не догоняю?

 
Mihail Marchukajtes:

Рома. ну то есть нужно сделать так? Поправь если ошибаюсь.

При открытии файла переменная отвечающия за хендел становится труе и прежде чем считать файл нужно дождаться значение переменной на фальше которое установится при закрытии файла пишущим советником. так это или я не догоняю?

void OnStart()
{   
   ResetLastError();
   int handle = FileOpen("file.csv", FILE_WRITE | FILE_CSV);
      
   if(handle != INVALID_HANDLE)
   {
      //handle сохраняешь в GV глобальную переменную терминала  
      if(GlobalVariableSet("handle", handle) != 0)
         Print("Файл открыт, значение сохранено в GV: "+(string)GlobalVariableGet("handle"));
      
      FileWrite(handle, TimeCurrent(), Symbol(), EnumToString(_Period)); 
      FileClose(handle);
      
      //После закрытия файла, изменяешь значение и перезаписываешь в GV
      handle = -1;
      if(GlobalVariableCheck("handle"))
      {
         if(GlobalVariableSet("handle", handle) != 0)
            Print("Файл закрыт, значение изменено в GV: "+(string)GlobalVariableGet("handle"));
      }   
   }
   else 
     Print("Операция FileOpen неудачна, ошибка ", GetLastError());
}

gv


В другой программе при чтении/записи, проверяешь значение этой глобальной переменной

if(GlobalVariableCheck("handle"))
{
   if(GlobalVariableGet("handle") < 0) 
      //файл закрыт
   else if(GlobalVariableGet("handle") > 0)
      //файл открыт
   else
      //ошибка получения

}

Когда файл открыт/закрыт из второй программы, так же делаешь по аналогии, записав значение в GV переменную.
И в первой программе проверяешь эту переменную.
То есть обе программы, должны всегда проверять на возможность доступа к файлу.
В данном примере, первая программа, не проверяет файл на доступ.
Надеюсь смысл понял, допилишь.
 
Roman:



В другой программе при чтении/записи, проверяешь значение этой глобальной переменной


Когда файл открыт/закрыт из второй программы, так же делаешь по аналогии, записав значение в GV переменную.
И в первой программе проверяешь эту переменную.
То есть обе программы, должны всегда проверять на возможность доступа к файлу.
В данном примере, первая программа, не проверяет файл на доступ.
Надеюсь смысл понял, допилишь.

Да спасибо большое буду разбиратся.