Структура массивов MQL4 и в VC++ различается?

 

Такое очучение, что при передаче указателя на многомерный массив из MQL4, DLL видит в нем только первое измерение.

(Win32 DLL в VC++6, VC++2008)

Получается, что структура массивов в памяти MQL4 и в VC++ различается?

Я, конечно, уже обошелся одномерным массивом, достигая последующие измерения умножением, но не очень красиво...

 
Передается многомерный, двумерный во всяком слоучае))). но в виде одномерного. С индексацией надо мутить в СИ.
 

почему такое очучение? код покажите.

 

Сделал из метатрейдерского DLLSample:

(в vc++)

MT4_EXPFUNC int __stdcall GetArrayValue(int* arr, const int x, const int y)
  {
	return(arr[x, y]);
  }

(в mql4)

#import "ExpertSample.dll"
	int GetArrayValue(int& arr[], int x, int y);
...
int Array[4, 4];
...
... GetArrayValue(Array, x, y);

Поправьте, если что не так делаю...

Файлы:
sample.rar  8 kb
 

и как длл узнает размерность массива? ей надо как то сообщить, сколько измерений. и размер одного измерения.

патамучта смещение элемента x-y вычисляется типа так x*N+y.

 

Вот, вот, я и говорю, что уже обошелся одномерным массивом, достигая последующие измерения умножением, но не очень красиво...

Предполагал, что эти N, M, ... есть в памяти в заголовке массива.

 
DolSergon >>:

Вот, вот, я и говорю, что уже обошелся одномерным массивом, достигая последующие измерения умножением, но не очень красиво...

Предполагал, что эти N, M, ... есть в памяти в заголовке массива.

А разве в С они есть в заголовке массива ? Вы не перепутали с классом "вектор", случаем ?

Еще вопрос: что бы это значило ? В смысле какой результат Вы ожидаете  от такого обращения ? :

MT4_EXPFUNC int __stdcall GetArrayValue(int* arr, const int x, const int y)
  {
 return(arr[x, y]);
  }
Массив одномерный, обращаетесь как к двумерному ????? И что, компилятор пропускает ?

Успехов.

 
VladislavVG >>:

А разве в С они есть в заголовке массива ? Вы не перепутали с классом "вектор", случаем ?

Еще вопрос: что бы это значило ? В смысле какой результат Вы ожидаете  от такого обращения ? :

Массив одномерный, обращаетесь как к двумерному ????? И что, компилятор пропускает ?

Успехов.

Да,

MT4_EXPFUNC int __stdcall GetArrayValue(int* arr[], const int x, const int y)
  {
	return(arr[x][y]);
  }
так он компилит, но МТ критическую ошибку делает...
 
DolSergon писал(а) >>

Вот, вот, я и говорю, что уже обошелся одномерным массивом, достигая последующие измерения умножением, но не очень красиво...

Предполагал, что эти N, M, ... есть в памяти в заголовке массива.

про них знает только компилятор. а заголовков никаких нет.

 
BabyBear >>:

про них знает только компилятор. а заголовков никаких нет.

А как можно объяснить компилятору?

Хотя, ладно, проще умножать... :)

Причина обращения: