跳至内容

Description of External Functions

外部函数的描述

在另一个模块中定义的外部函数必须明确描述。描述应包括返回类型、函数名称以及一系列输入参数及其类型。缺乏这样的描述可能会在编译、构建或执行程序时导致错误。在描述外部对象时,使用 #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

借助 import 功能,可以轻松描述从外部 DLL 或编译后的 EX4 库调用的函数。EX4 库是编译后的 ex4 文件,具有 属性。只有使用 export 修饰符 描述的函数才能从 EX4 库导入。

请记住,如果同时导入 DLL 和 EX4 库,它们的名称应该不同(无论它们位于哪个目录中)。所有导入的函数都具有与库“文件名”相对应的作用域解析。

在程序中从不同的执行上下文使用同名函数可能会导致歧义。为了避免函数调用的歧义,始终需要使用 作用域解析操作明确指定函数的作用域。

示例:

#import "kernel32.dll"
   int GetLastError();
#import "lib.ex4"
   int GetLastError();
#import

class CFoo
  {
public:
   int            GetLastError() { return(12345); }
   void           func()
     {
      Print(GetLastError());           // call of the class method
      Print(::GetLastError());         // call of the MQL5 function
      Print(kernel32::GetLastError()); // call of the DLL library function from kernel32.dll
      Print(lib::GetLastError());      // call of the EX4 library function from lib.ex4
     }
  };

void OnStart()
  {
   CFoo foo;
   foo.func();
  }

另请参阅

重载虚函数多态性

最后更新于