Как скомпилировать MQL5 в сторонней программе Netbeans (Eclipse)? - страница 3

 
Gocha123:

Если компилятор вызывается в *.bat можно в конце батника дописать команду "type" и всё становится как раньше, у меня напр. так: ( флажок "/s" кстати как и раньше позволяет выполнять только проверку синтаксиса)

type

не знаю к сожалению,

вставил в npp, ничего не выдает.

 

Ребят, ну так что на счет вывода диагностики в stdout? Никак нельзя сделать скажем /log:stdout?
Я вообще под юниксом сижу и у меня emacs, несколько лет назад все было просто, а теперь он молча компилирует или не компилирует и ничего не понятно.

Сам MetaEditor жудко не удобен для работы с кодом. Помогите :)

И, кстати, где можно узнать какие ключики metaeditor.exe принимает?

 
diaevd:

Ребят, ну так что на счет вывода диагностики в stdout? Никак нельзя сделать скажем /log:stdout?
Я вообще под юниксом сижу и у меня emacs, несколько лет назад все было просто, а теперь он молча компилирует или не компилирует и ничего не понятно.

Сам MetaEditor жудко не удобен для работы с кодом. Помогите :)

И, кстати, где можно узнать какие ключики metaeditor.exe принимает?

Ну, в общем сделал так, если кому надо (это для Emacs):

(defvar mql-compiler-default-version 4)


(defvar mql-compiler-path

  (concat

   (cond ((eq 'gnu/linux system-type) (concat

                                       "wine \"/home/" (user-login-name)

                                       "/.wine/dosdevices/c:"))

         ((eq 'windows-nt system-type) "\"C:"))

;;   "/Program Files (x86)/MetaTrader 4/MQL4/mql.exe\""))                                                                                                                                                    

   "/Program Files (x86)/MetaTrader 4/metaeditor.exe\""))


(cl-defun mql-compile (version &optional check-only)

  (compile (concat

            mql-compiler-path

            (case version

              (4 " /mql4 ")

              (5 " /mql5 "))

            (if check-only " /s " "")

            " /i:\""

            (file-name-directory (buffer-file-name)) "\" "

            " /compile:\""

            (file-name-nondirectory (buffer-file-name)) "\" "

            " /log:\"."

            (file-name-nondirectory (buffer-file-name)) ".compile\" "

            " 2>/dev/null"

            " ; iconv -f UTF-16 -t UTF-8 \"."

            (file-name-nondirectory (buffer-file-name)) ".compile\" "

            " ; rm \"."

            (file-name-nondirectory (buffer-file-name)) ".compile\" "

            )))


(defun mql-compile-dispatcher ()

  "Compile mql file."

  (interactive)

  (let* ((extension (file-name-extension (buffer-file-name)))

         (version (cond ((or (equal "mq4 "extension)

                             (equal "ex4 "extension)) 4)

                        ((or (equal "mq5 "extension)

                             (equal "ex5 "extension)) 5)

                        (t mql-compiler-default-version))))

    (mql-compile version

                 (if (equal "mqh" extension) :check-only))))



 
diaevd:

Ну, в общем сделал так, если кому надо (это для Emacs):

(defvar mql-compiler-default-version 4)


(defvar mql-compiler-path

  (concat

   (cond ((eq 'gnu/linux system-type) (concat

                                       "wine \"/home/" (user-login-name)

                                       "/.wine/dosdevices/c:"))

         ((eq 'windows-nt system-type) "\"C:"))

;;   "/Program Files (x86)/MetaTrader 4/MQL4/mql.exe\""))                                                                                                                                                    

   "/Program Files (x86)/MetaTrader 4/metaeditor.exe\""))


(cl-defun mql-compile (version &optional check-only)

  (compile (concat

            mql-compiler-path

            (case version

              (4 " /mql4 ")

              (5 " /mql5 "))

            (if check-only " /s " "")

            " /i:\""

            (file-name-directory (buffer-file-name)) "\" "

            " /compile:\""

            (file-name-nondirectory (buffer-file-name)) "\" "

            " /log:\"."

            (file-name-nondirectory (buffer-file-name)) ".compile\" "

            " 2>/dev/null"

            " ; iconv -f UTF-16 -t UTF-8 \"."

            (file-name-nondirectory (buffer-file-name)) ".compile\" "

            " ; rm \"."

            (file-name-nondirectory (buffer-file-name)) ".compile\" "

            )))


(defun mql-compile-dispatcher ()

  "Compile mql file."

  (interactive)

  (let* ((extension (file-name-extension (buffer-file-name)))

         (version (cond ((or (equal "mq4 "extension)

                             (equal "ex4 "extension)) 4)

                        ((or (equal "mq5 "extension)

                             (equal "ex5 "extension)) 5)

                        (t mql-compiler-default-version))))

    (mql-compile version

                 (if (equal "mqh" extension) :check-only))))



В отоге получаем вывод, а он уже парсится нормально, да и одного взгляда достаточно:

 

 -*- mode: compilation; default-directory: "~/src/FX/fxmax4/Exprerts/" -*-

Compilation started at Thu Mar  3 08:06:49


wine "/home/diabolo/.wine/dosdevices/c:/Program Files (x86)/MetaTrader 4/metaeditor.exe" /mql4  /i:"/home/diabolo/src/FX/fxmax4/Exprerts/"  /compile:"cpi.mq4"  /log:".cpi.mq4.compile"  2>/dev/null ; iconv\

 -f UTF-16 -t UTF-8 ".cpi.mq4.compile"  ; rm ".cpi.mq4.compile"



cpi.mq4 : information: Compiling 'cpi.mq4'

C:\Program Files (x86)\MetaTrader 4\MQL4\include\stderror.mqh : information: Including 'stderror.mqh'

C:\Program Files (x86)\MetaTrader 4\MQL4\include\stdlib.mqh : information: Including 'stdlib.mqh'

Result: 0 error(s), 0 warning(s), compile time: 122 msec


Compilation finished at Thu Mar  3 08:06:50

 
Renat Fatkhullin:
Сделаем вывод в консоль сообщений
скачал послдний билд,

к сожалению ничеги не изменилось

сделайте пожалуйста как нибудь
 

не получается получить файл ".ex5", подскажите, пожалуйста что может быть не так. 

#define SW_HIDE 0
#import "kernel32.dll"
   int WinExec(uchar &lpCmdLine[],uint uCmdShow);
#import

int OnInit(){ EventSetMillisecondTimer(800); return(INIT_SUCCEEDED);}
   
void OnTimer(){                          
   
   string path  = TerminalInfoString(TERMINAL_PATH);
   string pathD = TerminalInfoString(TERMINAL_DATA_PATH);
   
   string sParam = "\""+path+"\\metaeditor64.exe"+"\""+" /compile: "+"\""+"D\\_Close_Bid.mq5"+"\"";

   uchar ucParam[]; 
   ArrayResize(ucParam, StringLen(sParam)+1); 
   StringToCharArray(sParam, ucParam);       
     
   int result = WinExec(ucParam,SW_HIDE);     
   if (result<32)
      Alert("Выключение ПК не удалось. Код ошибки: ",result);}
  
void OnDeinit(const int reason){ EventKillTimer();}

Пытаюсь и вручную: 

вручную

Но файл не появляется нигде - ни на диске Д, ни в каталоге данных (пробовала и файлы с каталога данных брать изначально). Лог так же не могу найти 

 
Sofiia Butenko:

не получается получить файл ".ex5", подскажите, пожалуйста что может быть не так. 

Пытаюсь и вручную: 

Но файл не появляется нигде - ни на диске Д, ни в каталоге данных (пробовала и файлы с каталога данных брать изначально). Лог так же не могу найти 

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

 
Stanislav Korotky:

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

Рабочую папку первоначально пробовала, потом начала менять каталоги и чтоб сюда выложить уже обратно не меняла - эффект тот же... 

string sParam = "\""+path+"\\metaeditor64.exe"+"\""+" /compile:"+"\""+pathD+"\\Experts"+"\"";

Спасибо, сегодня почитаю статью, вдруг что-то замечу.

 
Sofiia Butenko:

Рабочую папку первоначально пробовала, потом начала менять каталоги и чтоб сюда выложить уже обратно не меняла - эффект тот же... 

Спасибо, сегодня почитаю статью, вдруг что-то замечу.

Я писал про ключ /inc - не увидел его в новой ("старой") модификации. Указать путь к компилируемому файлу в /compile недостаточно, если в нем есть зависимости.

 
Stanislav Korotky:

Я писал про ключ /inc - не увидел его в новой ("старой") модификации. Указать путь к компилируемому файлу в /compile недостаточно, если в нем есть зависимости.

Да, действительно в предыдущем примере не увидела зависимость от Trade.mqh. Попробовала ее прописать - ничего не изменилось. 

Потом попробовала с файлом где точно нет зависимости - так же не получилось... 

 string sParam = "\""+path+"\\metaeditor64.exe"+"\""+" /compile:\""+pathD+"\\Indicators\\_arrow.mq5\" /log";


 

Файлы:
_arrow.mq5  8 kb
Причина обращения: