Вопрос по WinExec

 
//+------------------------------------------------------------------+
//|                                                       xpert2.mq5 |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "http://www.mql5.com"
#property version   "1.00"

#import "kernel32.dll"
        int WinExec(string cmd, int showConsole);
#import

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {
   Print(WinExec("mspaint.exe", 1));
   return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
   EventKillTimer();
}
//+------------------------------------------------------------------+

Выводит

2010.11.29 02:23:38    xpert2 (EURUSD,H1)    2

Программу не запускает. В mt4 это работает. Выводит правильный код и запускает программу.

2010.11.29 02:23:19    aas EURUSD,H1: 33

В mt5 синтаксис такой же. Что не так?

 

1. По-моему передача строки в мт5 должна быть по адресу string &

но я бы рекомендовал ShellExecute.

вот пример для МТ4. в МТ5 функция должна быть unicode - ShellExecuteW

#import "shell32.dll"
   int ShellExecuteA(int hwnd, string lpOperation, string lpFile,string lpParameters,string lpDirectory,int nShowCmd);
#import

#define SW_SHOWNORMAL           1
#define SW_SHOWMINIMIZED        2

#define ERROR_BAD_FORMAT        11
#define ERROR_FILE_NOT_FOUND    2 
#define ERROR_PATH_NOT_FOUND    3

int rez=ShellExecuteA(WindowHandle(Symbol(),0),"open",Path, NULL,Path,SW_SHOWMINIMIZED);
if (rez>31) // запущен успешно
else if (rez==0) // нехватает ресурсов
else if (rez==ERROR_BAD_FORMAT) // это не exe файл
else if (rez==ERROR_FILE_NOT_FOUND) // файл не найден
else if (rez==ERROR_PATH_NOT_FOUND) // пусть не найден
else if (rez<=31) // ошибка запускаi
 
Просто кернел вдоль и поперек ансишный.

А мт5 весь юникодовский, мт4 ансишный :)

Так что используйте функцию StringToCharArray

И передавайте в WinExec не стринг а * uchar.

 
Большое спасибо. С uchar все работает.
Причина обращения: