共用不同 MQL 程序的资源
资源名称在整个终端中都是唯一的。稍后我们将学习如何不在编译阶段创建资源(通过 #resource 指令),而是使用 ResourceCreate 函数检查是否支持特定文件。无论如何,资源都是在创建它的程序上下文中声明的,因此全名的唯一性是通过绑定到文件系统(特定文件 ex5 的路径和名称)自动提供的。
除了包含和使用资源外,MQL 程序还可以访问另一个已编译程序(ex5 文件)的资源。只要使用资源的程序知道另一个包含所需资源的程序的位置路径和名称,以及该资源的名称,就可以做到这一点。
因此,终端提供了资源的一个重要特性,即共用:一个 ex5 文件中的资源可以在许多其他程序中使用。
要使用第三方 ex5 文件中的资源,必须以 "path_file_name.ex5::resource_name" 的形式指定。例如,假设 DrawingScript.mq5 脚本引用了 triangle.bmp 文件中的指定图像资源:
#resource "\\Files\\triangle.bmp" |
那么它在实际脚本中的名称将是 "::Files\\triangle.bmp"。
要使用其他程序(例如智能交易系统)中的相同资源,资源名称前应加上相对于终端数据目录中 MQL5 文件夹的 ex5 脚本文件路径,以及脚本本身的名称(编译形式为 DrawingScript.ex5)。将脚本添加到标准 MQL5/Scripts/ 文件夹中。在本例中,应使用 "\\Scripts\\DrawingScript.ex5::Files\\triangle.bmp" 字符串访问图像。".ex5" 扩展名是可选的。
如果在访问另一个 ex5 文件的资源时,没有指定该文件的路径,则会在请求资源的程序所在的同一文件夹中搜索该文件。例如,如果我们假设同一智能交易系统位于标准 MQL5/Experts/ 文件夹中,并且查询资源时未指明路径(例如,"DrawingScript.ex5::Files\\triangle.bmp"),则将在 MQL5/Experts/ 文件夹中搜索 DrawingScript.ex5。
由于资源是共用的,它们的动态创建和更新可用于在 MQL 程序之间交换数据。这直接发生在内存中,因此不失为文件或全局变量的理想替代选择。
请注意,要从 MQL 程序中加载资源,并不需要运行该程序:要读取资源,只需拥有一个包含资源的 ex5 文件即可。
当资源以 资源变量一节中显示了相关示例。