##困っている事
MQL4から呼び出しているdllモジュール内で任意のフォルダにファイル書き込みをしようとすると、
MT4のログに「0xE0434352」と出力され強制的に実行中止されてしまう。
##実現したい事
インジケーター実行時に最大で5分毎に20万文字(日本語を含む)をファイルに書き込みをしたいです。(都度情報が更新されるので、それを保持してチャート上に描画していきたい)
##やってみたこと
画面に表示する情報量が非常に多く処理が煩雑なので、
C#でモジュールを作成し、そのモジュールをMQL4 に読み込ませて処理結果をstringで受け取ろうと考えていました。
この実装自体は出来たのですが、MQL4のstring型で正しく文字が取得できていない事に気付きました。
仕様を確認してみると、255文字までしか受け取れないらしく、20万文字を取得することは諦め、C#上で20万文字分をファイル書き込みする事にしました。
###問題点1
しかしすぐに問題に直面します。
C#のライブラリ上でファイル書き込みをしようと(例えば、filestreamのインスタンス生成をするだけ、File.WriteTextAllの実行時など)するとMT4のログに「0xE0434352」と出力されてしまいます。理由は全くの不明です。
これが解決できれば一番楽です。
###問題点2
諦めきれなかったので色々と考え、Kernel32.dll であればMQL4内で扱える事を思い出しました。
Kernel32.dll のCreateFile,WriteFileメソッドを使用すればファイルに書き込めるはず…!と思いましたが、WriteFileメソッドはbyte[]型でしか書き込めない為、それをMQL4側で復元しなければならずその方法がないと思い諦めました。
###問題点3
更に思考を変え、C#内でPrcessStartを行い、別のexeを実行しexeからファイル書き込みをすればよいと考えました。
実際、「notepad」を実行させ、MQL4からメモ帳を開ける事は確認できました。
書き込み先のファイルパスと書き込むテキストの2引数を受け取るコンソールアプリケーションを作成し、それを呼び出すようにしましたが、MT4のログに「0xE0434352」と出力されてしまいます。
ProcessStartのワーキングディレクトリへのパス設定をしてもうまく行かなかったので、System32フォルダへ配置し、コマンドプロンプトから実行できることは確認しています。また、ProcessStartの呼び出しを行う1行を抜いた上で正常に動作することは確認していますが、やはりうまくいきませんでした。
どのようにすれば、MQL4から呼び出しているdllモジュール内で任意のフォルダにファイル書き込みをすることができるのでしょうか。
####補足
書き込み先は、MQLのFilesフォルダ以下です。
回答1件
あなたの回答
tips
プレビュー