Re: BeaRLib
Добавлено: 25 авг 2011, 07:49
Блин долго искал тему... а почему тема попала в форум "Heart of Darkness RL" а не в "Разработка рогаликов" где как мне кажется ей место.
Форум Клуба любителей roguelike-игр
http://www.rlgclub.ru/forum/
Да ей и тут неплохо, думаю, будетJesus05 писал(а):Блин долго искал тему... а почему тема попала в форум "Heart of Darkness RL" а не в "Разработка рогаликов" где как мне кажется ей место.
Да мы тут так решили вместе, что в этом форуме ей будет как раз. HoD будет использовать все возможности BeaRLibJesus05 писал(а):Блин долго искал тему... а почему тема попала в форум "Heart of Darkness RL" а не в "Разработка рогаликов" где как мне кажется ей место.
А это разве структура (record по пасу)? Нет. Это простая матрица из динамических массивовalexbard писал(а):Не могу заставить библиотеку работать на C#. Точнее она работает, но данные из CreateMap я принять не могу, т.к. маршалинг вложенных массивов не поддерживается. Т.е., если я ничего не путаю, то структуру array of array of char не получится передать.
Только в дин. массивах от 0 до n - 1.kipar писал(а):array[1..n]of array[1..m] of char эквивалентен array[1..m*n] of char
Я тут подумал, а если передавать в статический массив из массивов?alexbard писал(а):Не могу заставить библиотеку работать на C#. Точнее она работает, но данные из CreateMap я принять не могу, т.к. маршалинг вложенных массивов не поддерживается. Т.е., если я ничего не путаю, то структуру array of array of char не получится передать.
Я имел в виду именно статические массивы. А если в либе используются динамические, то это да - проблема. Динамический array of array of char - это указатель на массив указателей на массивы Сhar (или указателей на Char, надо уточнить).Apromix писал(а): Только в дин. массивах от 0 до n - 1.
Ну вот код импорта из dll на паскале:kipar писал(а):Я имел в виду именно статические массивы. А если в либе используются динамические, то это да - проблема. Динамический array of array of char - это указатель на массив указателей на массивы Сhar (или указателей на Char, надо уточнить).Apromix писал(а): Только в дин. массивах от 0 до n - 1.
Код: Выделить всё
type TBeaRLibMap = array of array of Char;
function GenMap(const X, Y, ID: Integer): TBeaRLibMap; stdcall; external 'BeaRLibMG.dll';
Код: Выделить всё
var
DR: TBeaRLibMap;
X: Word = 99; // 25 .. 511
Y: Word = 99; // 25 .. 511
Код: Выделить всё
var
I, J, Z: Integer;
S: string;
begin
RE.Clear;
Z := 1;
for Z := 1 to 15 do
begin
RE.Lines.Append('#' + IntToStr(Z));
SetLength(DR, X);
for I := 0 to X - 1 do SetLength(DR[I], Y);
DR := GenMap(X, Y, Z);
for I := 0 to X - 1 do
begin
S := '';
for J := 0 to Y - 1 do
S := S + DR[I][J];
RE.Lines.Append(S);
end;
end;
end;
То есть лучше передавать как массив из строк: array of string ?alexbard писал(а):Вы просили потестить вызов из С# и я это сделал. Более того msdn также согласен со мной в том, что вложенные массивы не поддерживаются. Вполне может быть можно было бы решить все, взяв array of string, но, насколько я помню из первого семестра универа, в паскале string сам по-себе - это array of char.
Массив из массивов или матрица - это и есть обыкновенный двумерный массив, индексы которого начинаются с нуляalexbard писал(а):А нельзя вместо массива массивов сделать обыкновенный двухмерный массив? Или так он не будет динамическим ?