##環境
VS Stduio 2019
C# (.NET Framework 4.0)
対象プラットフォーム x86
ライブラリ:UnmanagedExports
上記の環境で作成したモジュールをMQL4から呼び出そうとしています。
##困っている事
MQL4で、インジケーターから外部dll(C#で作成しています)のメソッド呼び出し時に2つ以上の引数があると実行できなくて困っています。
具体的には、以下のコードです。
MQL4
1#import "Hoge.dll" 2 void Fuga(string filePath, int no); 3#import
C#
1[DllExport("Fuga", CallingConvention = CallingConvention.StdCall)] 2public static void Fuga([MarshalAs(UnmanagedType.LPWStr)] string indicatorPath, int accountNo) 3{ 4}
C#の処理を何も書かずともエラーとなってしまいます。
エラーの内容としては、以下の通りです。スタックが破損して実行できないとのことです。
2021.01.28 14:05:17.322 _indicatorTest USDJPY,M5: stack damaged, check DLL function call in '_indicatorTest.mq4' (24,12)
##試してみたこと
・インジケーターからではなく、EAからであれば実行できることを確認しました。
・引数が1つ(string のみ、int のみ)のみであれば、インジケーターからでも問題なく実行できることを確認しました。
・引数が2つ(string, string、int,int, string,int int,string)の場合に、インジケーターから実行した場合に動作ししませんでした。
・C#側でのstringを受け取る際に、マーシャリングではなくIntPtrで受け取ってみましたが、動作しませんでした。
・CallingConvention = CallingConvention.Cdecl にすれば動作する、と記載があったので試してみましたが、動作しませんでした。
回答1件
あなたの回答
tips
プレビュー