2018年11月5日月曜日

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

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

MetaTrader でライブラリを作成する際、#property strict を書いてしまうと、実行時に以下のエラーが出てしまいます1

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

一応、検証した方法を載せておきます。

検証方法

以下のようにライブラリとヘッダを用意。

Libraries/libsum.mq4
1
2
3
4
5
6
7
#property library
#property strict
 
int sum(int a, int b)
{
   return a + b;
}
Include/libsum.mqh
1
2
3
#import "libsum.ex4"
   int sum(int a, int b);
#import

libsum.mq4 をコンパイルして、Libraries/libsum.ex4 が作成されたことを確認します。

そして、それをスクリプトで読み込みます。

Scripts/libsumtest.mq4
1
2
3
4
5
6
7
8
9
10
#property version   "1.00"
#property strict
 
#include <libsum.mqh>
 
void OnStart()
{
   int result = sum(1, 2);
   Print(result);
}

これを実行すると unresolved import function call エラー。

修正

ライブラリ内の #property strict を削除2

Libraries/libsum.mq4
1
2
3
4
5
6
7
#property library
// #property strict
 
int sum(int a, int b)
{
   return a + b;
}

再コンパイルして、Libraries/libsum.ex4 が更新されたことを確認します。

スクリプト libsumtest を実行すると正しく実行されました。

  1. コンパイルは通る 
  2. 他の誰かのためにコメントアウトして何かコメントを付けておく方が良いかもしれない 
?