私は、配列を返す関数を使ってC言語でDLLを作成しました。
MQL4からこの関数を呼び出すにはどうすればいいですか?
これは簡単な抜粋です。
dll:
MT4_EXPFUNC double * __stdcall GetRegression(const double * y、intサイズ、double tolerance)
{
double * result = new double [size];
…
結果を返します。
}
mql4:
double r [] = GetLinearRegression(Open、Bars、0.0); //エラー: 'Bars' – 変数が必要です
ここで何がうまくいかない?多分それはOpen配列であり、戻り値ではないのでしょうか?
ここには2つの別々の問題があると思います。まず、MQL4がDLLから配列を返すことを許可 しているとは思いません。代わりに、配列をin / outパラメータとしてDLL関数に渡し、関数にMQL4によって提供された配列を生成させる必要があると思います。第二に、Open []の価格の配列を直接DLLに渡すことができるとは思いません。私はあなたがあなた自身の配列にそれのコピーを持っていって、そしてそれをDLLに渡す必要があると思います – www.mql5.com/en/forum/119040を見てください
dllはうまくコンパイルされています。それは電話を受けます。しかし、渡された配列はdllではnullです。
何が悪いのか私にはわかりません。
MQL4:
#import "test.dll"
double SumArray(double arr []、int size);
#インポート
int start()
{
ダブルプライス[];
ArrayCopySeries(価格、MODE_OPEN、 "EURUSD&quo t;、0)。 // これで問題ありません。配列がコピーされます
double r = SumArray ( price 、Bars); // 渡されたprices配列がnull値であるため、 この呼び出しは -1を返し ます。
}
DLL:
MT4_EXPFUNC double __stdcall SumArray (const double * arr、int size){
二重合計= 0。
if(arr == NULL) // mql4ファイルでは配列ではないが配列はnull
{
-1.0を返します。
}
…
合計を返します。
}
参照によって配列を渡してみてください。double SumArray(double & arr []、int size);
実際には、さらに別の配列を作成してSeries配列をそれにコピーする必要があります。
系列配列は、DLLで直接使用できるような配列ではないようです。
これは私が個々のシリーズ配列に対してどのようにしているかです(テストは-2を返すべきです):
// mqlのインポート
#インポート
double ArrTest(double prices4dll []、int pries4dllsize、double prices []、int pricessize);
#インポート
// MQLメイン
ダブルプライス[];
ArrayCopySeries(価格、MODE_OPEN、 "EURUSD"、0)。
double prices4dll [];
ArrayCopy(prices4dll、prices);
int prices4dllsize = ArraySize(prices4dll);
int pricessize = ArraySize(prices);
印刷(ArrTest(prices4dll、p rices4dllsize、prices、pricessize));
// CPP
MT4_EXPFUNC二重__stdcall ArrTest(二重price4dll []、int prices4dllsize、二重price []、int pricessize)
{
if(prices4dll == NULL)
{
-1を返します。
}
if(prices == NULL)
{
-2を返します。
}
(0)を返します。
}
それはそれをするべきです。
5425: https://www.mql5.com/en/forum/124624
Originally posted 2019-08-04 04:17:05.