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

Внешние функции, определенные в другом модуле, должны быть явно описаны. Описание включает в себя тип возвращаемого значения, имя функции и набор входных параметров с их типами. Отсутствие такого описания может привести к ошибкам при компиляции, компоновке или выполнении программы. При описании внешнего объекта используйте ключевое слово #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.ex5"
  double  round(double value);
#import

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

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

Пример:

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

Смотри также

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