обработка string массива в dll

 
dll:
type Earr = array [0..5] of PChar;

function p(var arr: Earr): integer; stdcall;
begin
        arr[0] := '0';
        arr[1] := '1';
        arr[2] := '2';
        arr[3] := '3';
        arr[4] := '4';
        arr[5] := '5';
end;

mql:

#import ".dll"
   int p(string &arr[]);
#import

string arr[] = {"a", "b", "c", "d", "e", "f"};
p(arr);

Alert(arr[0],"|",arr[1],"|",arr[2],"|",arr[3],"|",arr[4],"|",arr[5]);
результат:

1|3|5|d|e|f

и где я дурак? )

про проблему передачи строк в dll читал, видимо она пофиксена, т.к. с обработкой одной строки все ок. с int - массивами тоже ок.

 

ИМХО, в одном случае вы работаете со строками, а в длл - с символами.

В mql вы вроде бы хотите подать char s [] [] - и это массив строк ..

но dll настроена на char [] - а это массив символов.

Если не заработает - то как заплатку, могу посоветовать функцию putString(index, string).

 

type Earr = array [0..5] of string;
картину не меняет

 
majestic >>:

картину не меняет

С Дельфи расстался давно, все, что было - неправда.

В прошлом посте написал глупость ) правильно у вас все

.

Может, так?

arr[0]^ := '0';

 

косяк где-то именно в индексах. т.к. замена:


   string arr[] = {"a", "bb", "ccc", "dddd", "eeee", "fffff"};
и:

        arr[0] := '000000';
        arr[1] := '11111';
        arr[2] := '2222';
        arr[3] := '333';
        arr[4] := '44';
        arr[5] := '5';

выдала оджидаемый результат: 


11111|333|5|dddd|eeee|fffff


но в идеале должно быть

000000|11111|2222|333|44|5
 

Судя по примеру DLL на С из папки samples.

Тип MQL-строки предствляется собой структуру (в Делфи структуре,кажется record соответствует), в которой первое поле имеет целочисленный тип и хранит длину строки,

а второе поле указатель на строку символов.

 

действительно )) изврат какой-то, но вот так:

type MqlStr = record
        int: Integer;
        char: string;
end;

type MString = array [0..5] of MqlStr;

function p(var arr: MString): integer; stdcall;
begin
        arr[0].char := '000000';
        arr[1].char := '11111';
        arr[2].char := '2222';
        arr[3].char := '333';
        arr[4].char := '44';
        arr[5].char := '5';
end;


заработало... ковыряем дальше ))

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