Библиотеки: MultiTester - страница 20

 

Хитрая ошибка со срывом кучи, которая похоже долго жила.

    ::ArrayResize(Buf, (int)user32::SendMessageW(Handle, CB_GETLBTEXTLEN, 0, 0 ));
    user32::SendMessageW(Handle, CB_GETLBTEXT, 0, Buf);


CB_GETLBTEXTLEN: The return value is the length of the string, in TCHARs, excluding the terminating null character

CB_GETLBTEXT: The buffer must have sufficient space for the string and a terminating null character

Надо писать

::ArrayResize(Buf, (int)user32::SendMessageW(Handle, CB_GETLBTEXTLEN, 0, 0 )+1);
 
traveller00:

Хитрая ошибка со срывом кучи, которая похоже долго жила.


CB_GETLBTEXTLEN: The return value is the length of the string, in TCHARs, excluding the terminating null character

CB_GETLBTEXT: The buffer must have sufficient space for the string and a terminating null character

Надо писать

Спасибо! Правда, GetExpertName, где это используется, стала почти рудиментом.

 
fxsaber:

GetExpertName, где это используется, стала почти рудиментом.

Как сказать, она используется в SetExpertName, которая дёргается из Run, а она является по сути одной из основных функцией в MultiTester. Хотя проявляется ошибка и редко, налетел случайно.

 
traveller00:

Как сказать, она используется в SetExpertName, которая дёргается из Run, а она является по сути одной из основных функцией в MultiTester. Хотя проявляется ошибка и редко, налетел случайно.

Давно уже не так.

 
    Str += iBeginTime ? "FromDate==" + ::TimeToString(iBeginTime, TIME_DATE) + "\n" : NULL;
    Str += iEndTime ? "ToDate==" + ::TimeToString(iEndTime, TIME_DATE) + "\n" : NULL;

Лишние знаки равно в "FromDate==" и "ToDate==" ?

 
traveller00:

Лишние знаки равно в "FromDate==" и "ToDate==" ?

Лишние, спасибо.

 
Здравствуйте. Я использую MultiTester как WFO вместе со штатным форвардом, но штатного делителя периода 1/4 не хватает. Пытаюсь разобраться в вашем коде и научить MultiTester заполнять поле даты форварда, но без знаний ООП не получается. Дошел до функции Run()  в файле MTTester. Дальше - не понимаю. Все параметры склеиваются в одну строку и передаются в SetSettings2 и SetSettings , где размножаются и передаются в буфер обмена. Не подскажете, что нужно ещё поправить, если в строке появится ещё один параметр и в каком месте MultiTester вставляет данные в окно? Я бы добавил ещё один хендл окна и текст даты форварда.
Ну и за одно, расскажите пожалуйста о назначении INITDEINIT fInit и INITDEINIT fDeinit в функции TesterSettings.Add().
 
Good Beer:
Здравствуйте. Я использую MultiTester как WFO вместе со штатным форвардом, но штатного делителя периода 1/4 не хватает. Пытаюсь разобраться в вашем коде и научить MultiTester заполнять поле даты форварда, но без знаний ООП не получается. Дошел до функции Run()  в файле MTTester. Дальше - не понимаю. Все параметры склеиваются в одну строку и передаются в SetSettings2 и SetSettings , где размножаются и передаются в буфер обмена. Не подскажете, что нужно ещё поправить, если в строке появится ещё один параметр и в каком месте MultiTester вставляет данные в окно?

Во вкладке Тестер->Настройки нажмите CTRL+C и затем в текстовом редакторе - CTRL+V. Увидите все настройки Тестера.

ForwardMode
ForwardDate

За форвард отвечают эти два параметра (второй актуален, когда первый равен 4).


MTTester управляет настройками Тестера через буфер обмена, создавая то, что видите в текстовом редакторе по CTRL+V.

 
fxsaber:


MTTester управляет настройками Тестера через буфер обмена, создавая то, что видите в текстовом редакторе по CTRL+V.

Спасибо.

Задача понятна: найти нужную строку по счёту сверху и заменить нужным текстом.

 
Good Beer:

Задача понятна: найти нужную строку по счёту сверху и заменить нужным текстом. 

Номер строки меняется и не важен.

  static bool Run( const string ExpertName = NULL,
                   const string Symb = NULL,
                   const ENUM_TIMEFRAMES period = PERIOD_CURRENT,
                   const datetime iBeginTime = 0,
                   const datetime iEndTime = 0,
                   const int ForwardMode = 0 )
  {
    string Str = "[Tester]\n";

    Str += (ExpertName != NULL) ? "Expert=" + ExpertName + "\n" : NULL;
    Str += (Symb != NULL) ? "Symbol=" + Symb + "\n" : NULL;
    Str += iBeginTime ? "FromDate=" + ::TimeToString(iBeginTime, TIME_DATE) + "\n" : NULL;
    Str += iEndTime ? "ToDate=" + ::TimeToString(iEndTime, TIME_DATE) + "\n" : NULL;
    Str += "ForwardMode=" + (string)ForwardMode + "\n";

    return(MTTESTER::SetSettings2(Str) &&
           MTTESTER::SetTimeFrame(period) && MTTESTER::ClickStart());
Причина обращения: