外部函数描述

在其它模块中定义的外部函数必须明确描述。描述应包括返回类型, 函数名称和输入参数序列以及它们的类型。这些描述缺失则会在编译、整编,或执行程序时导致错误。当描述一个外部对象时, 使用关键字 #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

在 import 的辅助下,很容易对即将从外部 DLL 或预编译的 EX5 程序库里调用的函数进行描述。EX5 程序库被编译为 ex5 文件, 它具有 library (库文件) 属性。仅当函数以 export (导出) 修饰符 描述后才可从 EX5 程序库里导入。

请留意, 如果 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 里调用 DLL 库函数
      Print(lib::GetLastError());      // 从 lib.ex5 里调用 EX5 库函数
     }
  };
 
void OnStart()
  {
   CFoo foo;
   foo.func();
  }

参阅

重载, 虚拟函数, 多态