Скрипт "Каталог программы"

 
Функция ProgramFolder возращает строку длиной не более 255 символов, содержащую путь к папке, из которой запущена программа terminal.exe.
В скрипте используется системная библиотека kernel32.dll. Внешняя функция GetModuleFileNameA заполняет символьный буфер, адрес которого передается по ссылке.
Поскольку в MQL4 нет типа данных, соответствующих типу символа - целого числа длинной 1 байт, то по ссылке передается адрес массива целых чисел, каждый элемент которого имеет длину 4 байта. Каждый байт элемента массива после заполнения представляет собой код символа. Один элемент массива содержит 4 кода символа. После заполнения массива кодами символов используются побитовые операции над каждым элементом массива. Коды символов преобразуется в значения элементов строки с помощью функции CharToStr.

// Каталог программы.mq4
// Скрипт
#property copyright "mandorr@gmail.com"
#import "kernel32.dll"
   int GetModuleFileNameA (int module, int& buffer[], int size);
#import
 
void start() {
   Comment ("Каталог программы: ",ProgramFolder());
   Print   ("Каталог программы: ",ProgramFolder());
}
 
string ProgramFolder() {
   string text="", matched_text=CharToStr('\');
   int buffer[64], index=255, start=1;
   GetModuleFileNameA (0,buffer,255);
   for (int i=0; i<ArraySize(buffer); i++) {
      text=text
         +CharToStr(buffer[i]     & 0x000000FF)
         +CharToStr(buffer[i]>> 8 & 0x000000FF)
         +CharToStr(buffer[i]>>16 & 0x000000FF)
         +CharToStr(buffer[i]>>24 & 0x000000FF)
      ;
   }
   while (index>0) {
      index=StringFind (text,matched_text,start);
      if (index>0) start=index+1;
   }
   text=StringSubstr(text,0,start);
   return (text);
}
 
// End

© Херург
Причина обращения: