[델파이] DLL에 동적 배열을 파라미터를 넘기기, DLL 반환값 동적 배열로 받기
DLL의 파라미터를 동적 배열로 넘기기
DLL의 반환값을 동적 배열로 반환하기
library SecondDll;
uses
SysUtils, Classes;
{$R *.res}
type
TDynArrVal = array of Integer;
function DynamicSum(DynArr: TDynArrVal): Integer; stdcall;
var
i, iSum : integer;
begin
iSum := 0;
for i := Low(DynArr) to High(DynArr) do
iSum := iSum + DynArr[i];
Result := iSum;
end;
function DynamicReturn(iCnt: integer): TDynArrVal; stdcall;
var
i : integer;
DynArr : TDynArrVal;
begin
SetLength(DynArr, iCnt);
for i := 0 to iCnt - 1 do
DynArr[i] := i + 1;
Result := DynArr;
end;
exports
DynamicSum,
DynamicReturn;
begin
end.
DLL의 파라미터를 동적 배열로 넘기기
DLL의 반환값을 동적 배열로 반환하는 DLL 사용하기
unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
// 동적 배열형 선언
public
{ Public declarations }
end;
var
Form2: TForm2;
type
TDynArrVal = array of Integer;
function DynamicSum(DynArr: TDynArrVal): Integer; stdcall; external 'SecondDll.dll';
function DynamicReturn(iCnt: integer): TDynArrVal; stdcall; external 'SecondDll.dll';
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
DynArrTest : TDynArrVal;
i : integer;
begin
// 동적 배열 크기설정
SetLength(DynArrTest, 10);
for i := Low(DynArrTest) to High(DynArrTest) do
DynArrTest[i] := i + 1;
// 동적 배열 파라미터 함수 호출
Button1.Caption := IntToStr(DynamicSum(DynArrTest));
end;
procedure TForm2.Button2Click(Sender: TObject);
var
DynArrTest : TDynArrVal;
i, iSum : integer;
begin
iSum := 0;
SetLength(DynArrTest, 10);
DynArrTest := DynamicReturn(10);
for i := Low(DynArrTest) to High(DynArrTest) do
iSum := iSum + DynArrTest[i];
Button2.Caption := IntToStr(iSum);
end;
end.

예제 소스