2018年11月5日月曜日

[MQL4] Library に strict を付けてはいけない

@ MetaTrader 4.00 Build 1090 (on Windows 10 Pro Ver. 1803)

MetaTrader でライブラリを作成する際、`#property strict` を書いてしまうと、実行時に以下のエラーが出てしまいますコンパイルは通る。

> libsumtest USDJPY,H1: unresolved import function call

`#property strict` を消すと正しく動作します。 なお、ライブラリの修正後はライブラリをコンパイルし直すのをお忘れなく。 > 参考 > > [Problem with #import library (Win XP, build 646) - Trading Strategies That Work - MQL4 and MetaTrader 4 - MQL4 programming forum](https://www.mql5.com/en/forum/152047) 一応、検証した方法を載せておきます。 ### 検証方法 以下のようにライブラリとヘッダを用意。 ```mq4 `title: "Libraries/libsum.mq4"; highlight:2 ; #property library #property strict int sum(int a, int b) { return a + b; } ``` ```mq4 `title: "Include/libsum.mqh"; #import "libsum.ex4" int sum(int a, int b); #import ``` `libsum.mq4` をコンパイルして、`Libraries/libsum.ex4` が作成されたことを確認します。 そして、それをスクリプトで読み込みます。 ```mq4 `title: "Scripts/libsumtest.mq4"; #property version "1.00" #property strict #include <libsum.mqh> void OnStart() { int result = sum(1, 2); Print(result); } ``` これを実行すると `unresolved import function call` エラー。
### 修正 ライブラリ内の `#property strict` を削除他の誰かのためにコメントアウトして何かコメントを付けておく方が良いかもしれない。 ```mq4 `title: "Libraries/libsum.mq4"; highlight:2 ; #property library // #property strict int sum(int a, int b) { return a + b; } ``` 再コンパイルして、`Libraries/libsum.ex4` が更新されたことを確認します。 スクリプト `libsumtest` を実行すると正しく実行されました。