【未解決→解決】作成したDLLをMT4で動かしたいが、動かない

C言語でのDLLの作成」でどうしてDLLを作成したかというと全てはMT4で動かすため。
MT4のバージョンが600系になった頃だったか、自作EAで動かないものが少しずつでてきた(※仕事が忙しくてだいぶ放置しているのが現状なので、正確に覚えていないけど)。

DLLも、そのうちの1つ。
正直なところ、Metatraderの最新情報を定期的にキャッチアップしていないし、ソースコードとMT4の構成管理もしていないので、動いていた時といなかった時の違いを比較できない。ただ、久しぶりに動かそうと思って動かなかったので現時点の状況を纏めておく。

やることは次の通り。

1.作成したDLLを動かすMT4のサンプルソースコードの作成
2.DLLとサンプルソースコードのMT4への配備
3.DLLが動くかの確認
4.各OSとMT4での動作確認

それでは始める。
1.作成したDLLを動かすMT4のサンプルソースコードの作成

#property copyright "Copyright 2013, graySpace999."
#property link      "http://d.hatena.ne.jp/graySpace/"
#property version   "1.00"
#property strict

#import "libtest.dll"
double movingAverages(double,double,double,double);
#import

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   double testNum = movingAverages(1,2,3,4);
   Print("***************",testNum);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

2.DLLとサンプルソースコードのMT4への配備
「MT4を起動→ファイル→データフォルダを開く」と進む。
まず、「MQL4\Experts」に1で作成したDLLを動かすMT4のサンプルソースコード(EA)を配置する。
次に、「MQL4\Libraries」にDLL(libtest.dllという名前にしている)を配置する。

3.DLLが動くかの確認
バックテストを動かす。作成したEAの名前は「dllTest」。
まず、DLLの使用を許可するために「ツール→オプション→エキスパートアドバイザー」から「DLLの使用を許可する」にチェックを入れる。

次にバックテストを実行する。

最後に結果を確認する。

失敗した。
エラーメッセージは「2014.10.12 05:54:46.540 2014.01.02 04:55 Cannot call 'libtest.dll::movingAverages', 'libtest.dll' is not loaded」。
なお、この結果は、Metaquotes社の公式ページからダウンロードしたMT4で、バージョンは4.00でBuild711のもの。実行環境は「windows8 64bit」

4.各OSとMT4での動作確認
バージョン4.00、Build711のMetaquotes社公式MT4@windows8(64bit)」では動作しなかったDLLだが、バージョン4.00、Build670のMetaquotes社公式MT4@windows7(64bit)」では動作した。

いくつかのパターンで実施したので纏めておく。
Windows8で失敗しているので、権限やセキュリティ設定の問題かな・・・。
なお、実行失敗はいずれも「Cannot call 'libtest.dll::movingAverages', 'libtest.dll' is not loaded」。


Windows7での結果。

OSの種類 MT4提供会社 MT4のバージョン MT4のbuild番号 DLL実行結果 備考
Windows7.0 64bit Metaquotes 4.00 670 実行成功 versionアップされないので、670でテストできた。
Windows7.0 64bit Metaquotes 4.00 711 未実施 versionアップされたら実施。
Windows7.0 64bit FXCM 4.00 625 実行失敗 versionアップされる前にテストした。version戻せないと再テスト不可能?
Windows7.0 64bit FXCM 4.00 711 実行成功 versionアップされた後でテスト。
Windows7.0 64bit CyberAgent 4.00 625 実行失敗 versionアップされる前にテストした。version戻せないと再テスト不可能?
Windows7.0 64bit CyberAgent 4.00 711 実行成功 versionアップされた後でテスト。

Windows8での結果。

OSの種類 MT4提供会社 MT4のバージョン MT4のbuild番号 DLL実行結果 備考
Windows8.1 64bit Metaquotes 4.00 670 未実施 このバージョンのMT4を持っていない。
Windows8.1 64bit Metaquotes 4.00 711 実行失敗 -
Windows8.1 64bit FXCM 4.00 625 未実施 このバージョンのMT4を持っていない。
Windows8.1 64bit FXCM 4.00 711 実行失敗 -
Windows8.1 64bit CyberAgent 4.00 625 未実施 このバージョンのMT4を持っていない。
Windows8.1 64bit CyberAgent 4.00 711 実行失敗 -

(追記)2014.10.13
DLLをmingwを使用してlinuxで作成するのではなく、Visual C++を使用してWindows8.1(MT4動作環境と同じマシン)で作成したら、Windows8.1 64bitで、Metaquotes社、CyberAgent、FXCM全てのMT4で実行に成功した
Visual C++ 2010 ExpressでDLLを作成する 〜 DLLをMetatrader4(MT4)で使用する」にメモした。