Этот вопрос Вам лучше задать на форуме www.mql4.com
1. Не стоит "stdcall" в объявлении процедуры на Паскале.
2. Динамический массив (array of), если не ошибаюсь, привязан к менеджеру памяти Borland'а, это лучше не использовать.
3. Размеры многомерного массива (за исключением первого) ноебходимо передавать как параметры.
Это должно работать.
В Delphi:
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 );
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите пожалуйста, как это сделать ...
Цель - написание своей функции сортировки массива, аналогично
В 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.В коде эксперта я делаю Импорт:
и вызываю процедуру так:
При вызове возникает ошибка . Что я делаю неправильно ?