Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Передача массива в DLL


Автор: valentos 23.5.2007, 19:43
Есть прога, которая из СтрингГрида заносит значения в Динамический массив!
Код

Mass:array of array of real;
/////
setlength(mass,n,m);

Потом этот массив нужно передать в функцию, расположенную в DLL, для последующей обработки!!!
Как передать такой массив!?  smile 
Напишите плиз маленький примерчик, на передачу, что бы можно было понять как это делается!!!

Автор: Yanis 23.5.2007, 20:00
Цитата(valentos @  23.5.2007,  20:48 Найти цитируемый пост)
Ну так Помогите по теме, чем можите!

Код
функция(массив);

Вот так передаются параметры.

Автор: valentos 23.5.2007, 20:08
Цитата(Yanis @  23.5.2007,  20:00 Найти цитируемый пост)
1:функция(массив); Вот так передаются параметры.

Код

Function Func(mass:array of array of real);

Так что ли?, Помоему это бред. Так не чего не работает!

Добавлено через 2 минуты и 49 секунд
Yanis,Примерчик мона?

Автор: Yanis 23.5.2007, 20:13
Цитата(valentos @  23.5.2007,  21:08 Найти цитируемый пост)
Yanis,Примерчик мона?

Мона, если исходных данных дашь побольше.
Что за функция, твоя ли это dll, какой массив.

Добавлено через 49 секунд
Кстати, глянь темы предложенные внизу страницы.

Автор: valentos 23.5.2007, 20:36
Ну вот,   массив (Mass) -- Динамический, двумерный типа Real !!! Забит данными:
 
Код

(1 2 3 4
  5 6 7 8
 3 4 5 6)

Массив в проге:
Код

var
mass: array of array of Real;
/// Размеры
Setlength(mass,n,m);


 Его нужно передать в функцию в DLL(Своя), ну допустим Func(); Долго соченять не будем!
Код DLL:
Код

type
    aw=array of array of real;
// это функция в DLL
// Сюда надо передать массив!

function Func(ax:aw):real;
     begin
// расчеты от балды, допустим: 
       result:=ax[1,1]*ax[2,2]-ax[1,2]*ax[2,1];
     end;
 
Как передать в эту функцию мой массив(Mass)?

Автор: Yanis 23.5.2007, 20:57
Код
library Project1;

uses SysUtils, Classes;

type
  PArr = ^TArr;
  TArr = array of Byte;

{$R *.res}

function Summ(a: PArr): Integer; stdcall;
var
  i: Integer;
begin
  Result := 0;
  for i := Low(a^) to High(a^) do
    Result := Result + a^[i];
end;

exports
  Summ;

begin
end.


Код
function Summ(a: PArr): Integer; stdcall; external 'Project1.dll';

var
  a: TArr;
begin
  SetLength(a, 5);
  a[0] := 1;
  a[1] := 2;
  a[2] := 3;
  a[3] := 4;
  a[4] := 5;
  ShowMessage(IntToStr(Summ(@a)));
end;

Автор: valentos 23.5.2007, 22:40
Спасиб, что навели на путь истиный!!! smile 

Автор: ivan219 24.5.2007, 18:45
Подождите речь шла о двух мерном массиве а пример на одномерном  smile  это непорядку  smile 

Как передать двух мерный массив smile 

Автор: Yanis 24.5.2007, 20:03
Цитата(ivan219 @  24.5.2007,  19:45 Найти цитируемый пост)
Как передать двух мерный массив

Ну я ж не совсем слепой.
Я привёл просто пример. Как видно valentos догадался как переделать под себя.
А вообще, всего не много надо, а просто сменить 
Цитата(Yanis @  23.5.2007,  21:57 Найти цитируемый пост)
type
  PArr = ^TArr;
  TArr = array of Byte;

на
Цитата(Yanis @  23.5.2007,  21:57 Найти цитируемый пост)
type
  PArr = ^TArr;
  TArr = array of array of Byte;

Ну и работать с массив как с двумерным.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)