跳至内容

Importing Functions (#import)

导入函数 (#import)

函数可以从编译后的MQL4模块(.ex4文件)和操作系统模块(.dll文件)中导入。模块名称在#import指令中指定。为了使编译器能够正确形成导入函数的调用并组织适当的传输参数,需要提供函数的完整描述。函数描述紧跟在#import “模块名称"指令之后。新的#import命令(可以没有参数)可以完成导入函数描述的块。

#import "file_name"
    func1 define;
    func2 define;
    ...
    funcN define;
#import

导入的函数可以具有任何名称。具有相同名称但来自不同模块的函数可以同时被导入。导入的函数可以具有与内置函数名称相同的名称。作用域解析决定了应调用哪个函数。

在#import关键字之后指定的文件的搜索顺序在导入函数的调用中有描述。

由于导入的函数位于编译后的模块之外,编译器无法验证传递参数的有效性。因此,为了避免运行时错误,必须准确描述传递给导入函数的参数的组成和顺序。传递给导入函数的参数(来自EX4和DLL模块)可以具有默认值。

以下不能在导入函数的参数中使用:

  • 指针 (*);
  • 指向包含动态数组和/或指针的对象的链接。
  • 包含字符串和/或任何类型动态数组的类、字符串数组或复杂对象不能作为从DLL导入函数的参数传递。

示例:

#import "user32.dll"
int    MessageBoxW(uint hWnd,string lpText,string lpCaption,uint uType);
#import "stdlib.ex4"
string ErrorDescription(int error_code);
int    RGB(int red_value,int green_value,int blue_value);
bool   CompareDoubles(double number1,double number2);
string DoubleToStrMorePrecision(double number,int precision);
string IntegerToHexString(int integer_number);
#import "ExpertSample.dll"
int    GetIntValue(int);
double GetDoubleValue(double);
string GetStringValue(string);
double GetArrayItemValue(double &arr[],int,int);
bool   SetArrayItemValue(double &arr[],int,int,double);
double GetRatesItemValue(double &rates[][6],int,int,int);
#import

在mql4程序的执行过程中导入函数时,使用早期绑定。这意味着库是在使用其ex4程序加载程序时加载的。

不建议使用完全限定的加载模块名称,例如Drive:\Directory\FileName.Ext。MQL4库从terminal_dir\MQL4\Libraries文件夹中加载。

另请参阅

包含文件

最后更新于