[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 250

 
TarasBY:
Сначала подсчитываете текущий профит по всем открытым ордерам, затем сравниваете с заявленным уровнем: если выше, удаляете все ордера. Эту процедуру (и не только) выполняет этот советник (там и код).

спасибо за наводку
 

Не понимаю.

gyfto:
//C++
MT4_EXPFUNC int __stdcall GetStrAddress(const char *str) {    
    MqlStr* s = (MqlStr*)str;
    return (int)s->string; 
}

Zhunko:
Всё же так:

MT4_EXPFUNC int stdcall GetStrAddress(LPCSTR szStr)
 {    
  return(int(szStr));
 }

Прогонял три раза с таким кодом:

#property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString(int integer_number);
#import "StrAddress.dll"
int OldGetStrAddress(string str);
int GetStrAddress(string szStr);
#import

int addrOld;
int addrNew;

int init()
  {
   string s=""; strAddress (s);
   s=s+"something"; strAddress (s);
   s="MyStr"; strAddress (s);
   s="mystr"; strAddress (s);
   return(0);
  }

int start()
  {
   return(0);
  }
void strAddress (string myStr)
  {
   addrOld=OldGetStrAddress(myStr);
   addrNew=GetStrAddress(myStr);
   Print(" строка ", CharToStr(34), myStr, CharToStr(34), ", старый вариант: ", IntegerToHexString(addrOld), ", новый вариант: ", IntegerToHexString(addrNew));
  }

 В логе отразилось:

строка "", старый вариант: 656D6F73, новый вариант: 01CD8A90
строка "something", старый вариант: 6E696874, новый вариант: 01CD9010
строка "MyStr", старый вариант: 00360072, новый вариант: 01CD8AA0
строка "mystr", старый вариант: 00360072, новый вариант: 01CD8AA8

строка "", старый вариант: 656D6F73, новый вариант: 01C97858
строка "something", старый вариант: 6E696874, новый вариант: 01CDCC30
строка "MyStr", старый вариант: 00360072, новый вариант: 01C978868
строка "mystr", старый вариант: 00360072, новый вариант: 01C997870

строка "", старый вариант: 656D6F73, новый вариант: 01D93108
строка "something", старый вариант: 6E696874, новый вариант: 01CC5A58
строка "MyStr", старый вариант: 00360072, новый вариант: 01D93118
строка "mystr", старый вариант: 00360072, новый вариант: 01D93120

 В первом варианте мы имеем указатель на первый элемент поля структуры MqlStr.string, во втором варианте указатель на первый элемент строки (LPCSTR всё тот же const char*). Видим разные адреса. П-п-почему? Получается, что строка как массив char и строка как внутренняя структура своего представления в MQL4 имеют разные адреса? Или это значит, что "структура строки", описанная в ExpertSample как внутренний формат, искусственная, и в действительности её внутренний формат в MQL4 - lpsz? Или я элементарно неправильно разобрал первый код?

 
всем доброго времени суток. подскажите пожалуйста, после компиляций на значке советника появляется замок и я его могу видеть только в окне загрузки через программу а в папке он невидим, как исправить? Спасибо.
 
В некоторых примерах вижу return(-1), return(0) или просто return. Для прерывания программы с данного места использую return(0). Подскажите, что делают return(-1) и return?
 
gyfto:
Или это значит, что "структура строки", описанная в ExpertSample как внутренний формат, искусственная, и в действительности её внутренний формат в MQL4 - lpsz?

Это значит, что в DLL строка передается именно как char*, а не как MqlStr. Но не значит, что в ex4-программе строка не хранится как MqlString. Вообще передача параметров из ex4 в dll - это (по заявлениям разработчиков) довольно сложный процесс, сопровождающийся всевозможными проверками и преобразованиями параметров.
 
laveosa:
всем доброго времени суток. подскажите пожалуйста, после компиляций на значке советника появляется замок и я его могу видеть только в окне загрузки через программу а в папке он невидим, как исправить? Спасибо.
Win 7 и терминал стоит на системном диске? Хотите избавиться от текущих и будущих проблем - перенесите терминал на другой диск и "всё наладится".
 
paladin80:
В некоторых примерах вижу return(-1), return(0) или просто return. Для прерывания программы с данного места использую return(0). Подскажите, что делают return(-1) и return?
Это возвращаемой функцией значение. Вернитесь к мат.части.
 
paladin80:
В некоторых примерах вижу return(-1), return(0) или просто return. Для прерывания программы с данного места использую return(0). Подскажите, что делают return(-1) и return?

return(-1) возвращает минус единицу в качестве результата работы функции, которая (-1) может означать что-то, только если разработчик данной программы это что-то туда вложил самостоятельно. В противном же случае не означает ничего.

return просто завершает работу функции (используется при типе возвращаемого значения void).

 
TarasBY:
Это возвращаемой функцией значение. Вернитесь к мат.части.

В общем return(0) прекращает действие функции int start() и ждём следующего тика. Если нет цифры или стоит -1, что произойдёт в int start()?

 
TarasBY:
Win 7 и терминал стоит на системном диске? Хотите избавиться от текущих и будущих проблем - перенесите терминал на другой диск и "всё наладится".

огромное спасибо :)  ща попробую.
Причина обращения: