Ошибки, баги, вопросы - страница 1313

 
Konstantin Karpov:
Как на этапе компиляции определить какой битности терминал? Идентификатор TERMINAL_X64 не подходит т.к. предназначен для функций. Скорее всего есть макросы о которых в справке не написано, но периодически которые иногда всплывают в тех или иных проявлениях :)
Увы, не всплывают. Есть переменная _IsX64 но она работает на этапе исполнения.
 

Как же вывернуться в случае использования двух dll - одна для 32х битных терминалов, другая для 64х битных ? Не кашерно как то два экземпляра программы держать ...

Кстати у кого есть опыт, если код скомпилировать в МЕ х64 то на 32х битных терминалах он будет работать без ошибок или все же будут какие то скрытые особенности исполнения кода?

 

К примеру есть функция funcTest(...) в библиотеке для 32х битных терминалов library_x86.dll и для 64х битных library_x64.dll.

Если import видна в пределах всего файла, то правильно ли будет писать такую конструкцию:

void CClass::Test(...) {
  код метода...

   if(TerminalInfoInteger(TERMINAL_X64)) {
      #import library_x64.dll
         library_x64::funcTest(...);
      #import
   } else {
      #import library_x86.dll
         library_x86::funcTest(...);
      #import
   }

   код метода...
}
или этот прием не сработает?
 
Konstantin Karpov:
или этот прием не сработает?

Насколько я знаю, нет. Можно импортировать обе дллки и вызывать функции одной или другой в зависимости от битности терминала.

А вообще разделение на две версии по битности не такой уж бредовый вариант. 

 

Беру индикатор (любой из стандартного комплекта), вызываю в советнике:

iCustom (NULL, 0, "Momentum", 0, 1);

 После прогона советника с визуализацией в тестере - всё работает, индикатор отрисовывается.

Теперь в индикаторе меняю одну строчку:

ExtMomBuffer[i]=close[i]*100/close[i-InpMomPeriod];

 на такую:

ExtMomBuffer[i]=100;

И теперь индикатор не рисует вообще ничего - даже вертикальная шкала не обозначена.

Где ошибка? MetaTrader 4 build 765.

 
Чтобы появилась шкала, надо два разных значения в пределах окна? ЕМНИП. Не уверен, можно ли это считать багом.
 

Ладно, назовем это нетрадиционным поведением :)

Спасибо огромное, но у меня еще один вопрос. Да, вот так заработало:

ExtMomBuffer[i]=i%2;

 А вот так опять перестало:

ExtMomBuffer[0]=i%2;

 У меня это работало в старых версиях МТ, а что в новых не так?

 

Так во втором варианте одно значение.

Вообще хз, я могу и ошибаться. 

 

Ну можно и вот так сделать, все равно не работает:

ExtMomBuffer[0]=cnt++;

 Суть проблемы в том, что попытка на каждом шаге советника писать в 0-й бар индикатора - ничего не дает.

 

Кажется, нащупал, куда рыть. Поменял

ArraySetAsSeries(ExtMomBuffer,false);

 на true и что-то начало проявляться. Пойду напьюсь.