[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 558

 
Chiripaha:

Pas vraiment...

Je voulais faire quelque chose comme un menu. Tout comme dans la variable bool soit faux ou vrai.
Pour que l'utilisateur ne puisse cliquer que sur des valeurs clairement définies du paramètre. Pour qu'il n'en entre pas "par erreur" d'inutiles, car dans ce cas, le conseiller expert ne fonctionnera pas correctement.

L'utilisateur est même moi-même. Il est en effet possible d'oublier quels paramètres doivent être présents pour une variable particulière.

Le MQL4 n'a pas cette possibilité (mais le MQL5 l'a). Vous pouvez vérifier ce paramètre lors de l'initialisation et, s'il ne correspond pas à une certaine valeur, signaler une erreur. Ensuite, au tout début du départ, il faut le vérifier. Je l'ai fait dans mon EA, par exemple :

extern int  val=5;
       bool val_error=false;
// -----
init()
{  ...
   if (val!=5  || val!=10 || val!=20 || val!=40 ||
       val!=60 || // и т.д.)
      {   val_error=true;
          Alert("Неправильный val!");
      }
   ...
}
// -----
start()
{  if (val_error=true) return;
   ...
}
 

Bonjour à tous. J'essaie d'écrire une fonction qui écrit un fichier dans un répertoire spécifié par l'utilisateur (en travaillant en dehors du bac à sable).

J'ai écrit le code en utilisant la bibliothèque"ZI_File_Functions_Full_Lib"https://www.mql5.com/ru/code/8577.

La fonction"PathFunctions.dll."https://www.mql5.com/ru/code/10873 ne convient pas car il fonctionne avec Vista, j'ai Windows 7.

Toutes les choses inutiles ont été supprimées car la lecture n'est pas nécessaire, il suffit de prendre un répertoire et d'y créer un fichier avec une valeur connue au départ, c'est tout.

Questions :

1. Je n'arrive pas à comprendre où se trouve la valeur que nous écrivons dans le fichier ?

2. Je n'arrive pas à localiser l'endroit où une erreur est écrite ?

Merci d'avance.

//===============================================================================================================================================================
//     Импортируемые функции.
//===============================================================================================================================================================

#import "ntdll.dll"
int RtlGetLastWin32Error();
int RtlSetLastWin32Error (int dwErrCode);
#import
#include <WinKernel32.mqh>                                      // Заголовочный файл библиотеки "kernel32.dll" функций API Windows XP.

//===============================================================================================================================================================
// Объявленные константы.
//===============================================================================================================================================================

#define FILE_FULL_CREATE    0                                   // Создать или переписать файл.

//===============================================================================================================================================================
//    Функция открывает или создаёт файл.
//    Функция открывает/создает файл для ввода и/или вывода. Если при открытии для записи файла нет, то он будет создан. Для создания директории
//    используется функция "CreateDirectory()". Функция возвращает: handle - файловый описатель, если функция выполнилась без ошибки;
//                                                               -1     - возникла системная ошибка;
//                                                               -2     - ошибка при перемещении файлового указателя в конец файла;
//                                                               -3     - указан недопустимый способ открытия файла.
//===============================================================================================================================================================
int start(){
   int FileOpenFull (string PathName="D:\files\DATA.csv",      // Имя файла с абсолютным путём.
                     int    ModeCWR=0)                         // Способ открытия файла: 0 - FILE_FULL_CREATE    Открытие файла для записи. Если файл существует, то содержимое файла будет
                                                               //                                                уничтожено. Если файл с таким именем не существует, то будет создан новый.
    {
     int Error;                                                // Номер последней ошибки.
     int Handle;                                               // Файловый описатель.
//===============================================================================================================================================================
  RtlSetLastWin32Error(0);                                                                                              // Обнуляем ошибку.
  if (ModeCWR != FILE_FULL_READ)                                                                                        // Если функция вызвана не для чтения, проверяем на наличие файла.
   {                                                                                                                    // Проверяем на наличие файла. Читаем файл.
    Handle = CreateFileA (PathName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (RtlGetLastWin32Error() == 2 && Handle == -1) ModeCWR = FILE_FULL_CREATE;                                        // Файла нет. Создаём файл.
    else
     {
      if (!CloseHandle (Handle))
       {
        Error = RtlGetLastWin32Error();
        Print ("Ошибка в функции \"FileOpenFull()\". Файл с путём \"", PathName, "\" не закрыт при проверки на наличие. Последняя ошибка: \"", Error, "\". ", StringError (Error));
        return (-1);
       }
     }
    RtlSetLastWin32Error(0);                                                                                            // Обнуляем ошибку.
   }
   
//===============================================================================================================================================================
//     Переключатель по способам открытия файла.
//===============================================================================================================================================================
  
  switch (ModeCWR)
   {                                                                                                                    // Создаём файл.
    case FILE_FULL_CREATE:
     {
      Handle = CreateFileA (PathName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
      if (Handle == -1)
       {
        Error = RtlGetLastWin32Error();
        Print ("Ошибка в функции \"FileOpenFull()\". Файл с путём \"", PathName, "\" не открыт. Последняя ошибка: \"", Error, "\". ", StringError (Error));
       }
      return (Handle);
     }
    
//===============================================================================================================================================================
//     Функция закрытия файла.
//     Функция закрывает ранее открытый файл. Если файл закрыт успешно, функция возвращает TRUE, иначе возвращает FALSE.
//===============================================================================================================================================================

   bool FileCloseFull (int Handle)                                                                                   // Файловый описатель, возвращаемый функцией "FileOpenFull()".
    {
     int Error;                                                                                                      // Номер последней ошибки.
     //----
     RtlSetLastWin32Error (0);
     if (!CloseHandle (Handle))
      {
       Error = RtlGetLastWin32Error();
       Print ("Ошибка в функции \"FileCloseFull()\". Последняя ошибка: \"", Error, "\". ", StringError (Error));
       return (false);
      }
     else return (true);
    }

//===============================================================================================================================================================
//    Функция возвращает код системной ошибки.
//===============================================================================================================================================================

   int SystemError()
    {
     return (RtlGetLastWin32Error());
    }
 
//===============================================================================================================================================================
//    Функция возвращает строковое описание кода системной ошибки.
//===============================================================================================================================================================

   string StringError (int ErrorCode)                                                     // Код системной ошибки.
    {
     int    i;
     string String = "";
     //----
     int    Buffer[128];
     //----
     ArrayInitialize (Buffer, 0);
     FormatMessageA (0x1000, 0, ErrorCode, 0, Buffer, ArraySize (Buffer), 0);
     //----
     for (i = 0; i < ArraySize (Buffer); i++)
      {
       String = String + CharToStr (Buffer[i]       & 0xFF)
                       + CharToStr (Buffer[i] >>  8 & 0xFF)
                       + CharToStr (Buffer[i] >> 16 & 0xFF)
                       + CharToStr (Buffer[i] >> 24 & 0xFF);
      }
     return (StringTrimRight (String));
    }
//===============================================================================================================================================================
//    Конец
//===============================================================================================================================================================
}
 
merkulov.artem:

Bonjour à tous. J'essaie d'écrire une fonction qui écrit un fichier dans un répertoire spécifié par l'utilisateur (en travaillant en dehors du bac à sable).

J'ai écrit le code en utilisant la bibliothèque"ZI_File_Functions_Full_Lib"https://www.mql5.com/ru/code/8577.

La fonction"PathFunctions.dll."https://www.mql5.com/ru/code/10873ne convient pas car il fonctionne avec Vista, j'ai Windows 7.

Toutes les choses inutiles ont été supprimées car la lecture n'est pas nécessaire, il suffit de prendre un répertoire et d'y créer un fichier avec une valeur connue au départ, c'est tout.

Questions :

1. Je n'arrive pas à comprendre où se trouve la valeur que nous écrivons dans le fichier ?

2. Je n'arrive pas à localiser l'endroit où une erreur est écrite ?

Merci d'avance.

Artyom ! !! Où est-il écrit qu'il ne fonctionne pas avec Windows 7 ? Pourquoi lisez-vous si inattentivement ? Je ne suis pas surpris que ça ne marche pas pour vous.



J'ai regardé votre code et j'ai réalisé que vous ne savez pas programmer. Prenez d'abord l'exemple de l'aide. Exécutez-le. Voyez comment cela fonctionne. Puis passez à des choses plus compliquées.

Un fichier est d'abord créé ou ouvert. Ensuite, écrivez ou lisez-le. Alors fermez-la. Vous avez juste copié les déclarations de fonctions dans le début. Vous avez arraché un morceau de code d'une fonction universelle. Maintenant, il est juste suspendu là. Cela n'a rien à voir avec quoi que ce soit. C'est pour quoi faire ? Ça ne marchera pas.

 
Bonjour, pourriez-vous me dire comment fermer le testeur de stratégie, sur quoi dois-je appuyer ?
 
angelina8:
Bonjour, pourriez-vous me dire comment fermer le testeur de stratégie, sur quoi dois-je appuyer ?

 
Vous pouvez soit appuyer sur Ctrl+R, soit sur le bouton - dans le menu mt4, qui est entouré en rouge dans l'illustration ci-dessus.
 
Quel document dois-je télécharger sur mon compte personnel ?
 
angelina8:
Quel document dois-je télécharger sur mon compte personnel ?

Pour quoi faire ?
 
pour retirer des fonds
 
angelina8:
afin de retirer des fonds


Cela dépend de la société de courtage. Moi, par exemple, j'ai une copie de mon passeport et un questionnaire
Raison: