Forex Scalpino Robot (以下、FSR)で発生した、cannot load library エラーの回避方法の記録です。
お名前.comさんのVPS (WIndows Server 2012 R2)で、MT4のEAであるFSRが、どういう訳か稼働しない問題についていろいろ調べて回りました。(使えるねっとさんの、Windows Server 2008 R2でも同様に、エラーでした)
結果としては、MSVCR71.dllが実行時に必要でしたが、このdllが不足していた為、EAが稼働しませんでした。
MSVCR71.dllはVisual Studioで開発したプログラムを実行させる場合に必要となるものですが、これを追加で用意することで、error126が回避できました。
事象:このように、EAが稼働停止してしまう
22:10:02 Forex Scalpino Robot EURUSD,M15 inputs: CLICKBANK.ID="XXXXXXXX"; EMAIL="XXXXXXXXX"; Lots=0.1; StopLoss=31; Take,,,, 22:10:18 Forex Scalpino Robot EURUSD,M15: cannot load library 'ForexScalpinoRobot.dll' (error 126) 22:10:18 Forex Scalpino Robot EURUSD,M15: expert stopped 22:10:18 Forex Scalpino Robot EURUSD,M15: initialized
原因として、Windowsのセキュリティ機能である、データ実行防止(DEP)を疑い、どはまりしましたが、手持ちの Windows XP SP3ではFSRの稼働に問題ないことから別アプローチにて調査しました。たどり着いた先が、実行時の依存性欠如によるエラーです。
問題となっている’ForexScalpinoRobot.dll’について、’Dependency Walker’というフリーのソフトを使って依存関係を見た結果が次の図となります。
<- はてなマークがついている、”MSVCR71.DLL”が怪しいとわかります
これで、問題解決の糸口が見つかりましたので、Webから当該dllをダウンロードし、FSRが稼働するMT4の”terminal.exe”と、MQL4->Libraryフォルダの2箇所に”MSVCR71.dll”をコピーしました。(どちらか一方でいいはずですが、面倒なので両方にコピー)
そして、やっとこさ問題解決とあいなりました。。。