Русский

Справочник MQL4 Основы языка Функции Описание внешних функций

Справка MQL4 одним файлом:

Описание внешних функций

Внешние функции, определенные в другом модуле, должны быть явно описаны. Описание включает в себя тип возвращаемого значения, имя функции и набор входных параметров с их типами. Отсутствие такого описания может привести к ошибкам при компиляции, компоновке или выполнении программы. При описании внешнего объекта используйте ключевое слово #import с указанием модуля.

Примеры:

#import "user32.dll"
  int     MessageBoxW(int hWnd ,string szText,string szCaption,int nType);
  int     SendMessageW(int hWnd,int Msg,int wParam,int lParam);
#import "lib.ex4"
  double  round(double value);
#import

С помощью импорта можно очень легко описывать функции, вызываемые из внешних DLL или скомпилированных EX4 библиотек. Библиотеками EX4 являются скомпилированные ex4-файлы, которые имеют свойство library. Импортировать из EX4 библиотек можно только функции, описанные с модификатором export.

При совместном использовании DLL и EX4-библиотек следует помнить о том, что библиотеки должны иметь разные имена (вне зависимости от каталогов их размещения). Все импортируемые функции получают область видимости "имя файла" библиотеки.

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

Пример:

#import "kernel32.dll"
   int GetLastError();
#import "lib.ex4"
   int GetLastError();
#import
 
class CFoo
  {
public:
   int            GetLastError() { return(12345); }
   void           func()
     {
      Print(GetLastError());           // вызов метода класса
      Print(::GetLastError());         // вызов функции MQL4
      Print(kernel32::GetLastError()); // вызов функции kernel32.dll
      Print(lib::GetLastError());      // вызов функции lib.ex4
     }
  };
 
void OnStart()
  {
   CFoo foo;
   foo.func();
  }

Смотри также

Перегрузка, Виртуальные функции, Полиморфизм