프로그래밍 노트

[델파이] DLL에 동적 배열을 파라미터를 넘기기, DLL 반환값 동적 배열로 받기 본문

델파이

[델파이] DLL에 동적 배열을 파라미터를 넘기기, DLL 반환값 동적 배열로 받기

띠리 2009. 8. 17. 21:27

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.





invalid-file

예제 소스


 

Comments