Передача массива DOUBLE из MT4 в DLL

 
Здравствуйте !

Подскажите пожалуйста, как это сделать ...
Цель - написание своей функции сортировки массива, аналогично
int ArraySort( double&array[], int count=WHOLE_ARRAY, int start=0, int sort_dir=MODE_ASCEND)



В Delphi пишу библиотеку:


library SortProcedures;

uses
  ShareMem,
  SysUtils,
  Classes;

{$R *.res}

type
  DoubleArray = array of Double;

procedure ArraySortEx(A: array of DoubleArray; Size: Integer; StartFrom: Integer; SortType: Integer);
var
  F: TextFile;
  i, j: Integer;
begin
  AssignFile(F, 'C:\array.txt');
  Rewrite(F);
  for i:=StartFrom to Size - 1 do
    for j:=0 to 8 do
      WriteLn(F, FloatToStr(A[i][j]));
  CloseFile(F);
end;

exports ArraySortEx;

begin
end.



В коде эксперта я делаю Импорт:

#import  "SortProcedures.dll"
  void ArraySortEx(double A[][], int Size, int StartFrom, int SortType);
#import



и вызываю процедуру так:

   double DataArray[100][10];
...
   ArraySortEx(DataArray,50,0,MODE_DESCEND);




При вызове возникает ошибка . Что я делаю неправильно ?

 
Этот вопрос Вам лучше задать на форуме www.mql4.com
 
1. Не стоит "stdcall" в объявлении процедуры на Паскале.
2. Динамический массив (array of), если не ошибаюсь, привязан к менеджеру памяти Borland'а, это лучше не использовать.
3. Размеры многомерного массива (за исключением первого) ноебходимо передавать как параметры.
Это должно работать.
В Delphi:
library SortProcedures;

uses
  ShareMem,
  SysUtils,
  Classes;

{$R *.res}

type
  DoubleArray2 = array [0..0] of Double;
  PDoubleArray2 = ^DoubleArray2;

procedure ArraySortEx(
    A: PDoubleArray2;
    Size: Integer;
    StartFrom: Integer;
    SortType: Integer;
    SecondDim: integer ); stdcall;
var
  F: TextFile;
  i, j: Integer;
begin
  AssignFile(F, 'C:\array.txt');
  Rewrite(F);
  for i:= StartFrom to StartFrom + Size - 1 do
    for j:= 0 to 8 do
      WriteLn( F, FloatToStr( A^[ i * SecondDim + j ] ) );
  CloseFile(F);
end;

exports ArraySortEx;

begin
end.



в MT:

#import  "SortProcedures.dll"
  void ArraySortEx( double A[][], int Size, int StartFrom, int SortType, int SecondDim );
#import
#define SECONDDIM 10
...
   double DataArray[100][SECONDDIM];
   ArraySortEx( DataArray, 50, 0, MODE_DESCEND, SECONDDIM );
Причина обращения: