프로그래밍 노트

델파이에서 DLL에 문자열 넘기고 받기 본문

델파이

델파이에서 DLL에 문자열 넘기고 받기

띠리 2007. 8. 8. 10:34


문자열 넘기고 받는 간단한 C의 DLL 소스

char    szTemp[50];


extern "C"

{

    // DLL 문자열 인수 입력

    BOOL PASCAL EXPORT SetStr(char *pszSend)

    {

        sprintf(szTemp, "%s", pszSend);

        return true;

    }


    // DLL 문자열 인수로 문자열 넘겨주기

    BOOL PASCAL EXPORT GetStr(char *pszSend)

    {

        sprintf(pszSend, "%s + %s", szTemp , szTemp);

        return true;

    }


}



DLL에서 문자열을 주고 받기 위해서는
델파이에서 PChar형으로 문자를 DLL에 넘겨주고 받으면 된다.


문자열을 넘기고 받는 델파이 소스

unit dtest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart;

type
  TfrmMain = class(TForm)
    btnTest: TButton;
    edtStr: TEdit;
    lblStr: TLabel;
    edtNo: TEdit;
    lblNo: TLabel;
    procedure btnTestClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

// DLL에서 문자열을 넘겨주고 받기 위해서는 PChar형을 쓴다.
function SetStr(psStr:PChar):integer; stdcall; external 'dtest.dll';

function GetStr(psStr:PChar):integer; stdcall; external 'dtest.dll';

procedure TfrmMain.btnTestClick(Sender: TObject);
var
  nNo:Integer;
  psStr:PChar;
  sString:String;
  nWork:Integer;

begin

  // 문자열 초기화
  psStr := Nil;
  // 문자열 사이즈 잡기
  psStr := AllocMem(50);

  sString := edtStr.Text;

  // String형을 PChar형으로 캐스트
  psStr := PChar(sString);

  // dll에 문자열 입력
  SetStr(psStr);

  // 문자열 초기화
  psStr := Nil;
  // 문자열 사이즈 잡기
  psStr := AllocMem(50);

  // dll에서 문자열 가져오기
  GetStr(psStr);

  // PChar형에서 String형으로 바꾸기
  sString := StrPas(psStr);

  lblStr.Caption := sString;
 
  if psStr <> Nil then FreeMem(psStr);

end;

end.



Comments