配列を返すdll関数を呼び出す

こんにちは、みんな!

私は、配列を返す関数を使って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 = SumArrayprice 、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);


私はごく最近DLLを扱ってきたので DLL地獄は私にとって新鮮です。

実際には、さらに別の配列を作成して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.

Translate »