Delphi字符串 DLL传递字符串方式

由于是半路出家,写起代码来比较随性。每次在写dll传递字符串时需要费很大的劲。

在这里来一个Demo演示一下:

dll代码:

library dlltest1;

uses
  SysUtils,
  Classes;

{$R *.res}

procedure fun1(p1: pchar; var p2: pchar); stdcall;
var
  str: string;
begin
  str:= p1;
  p2:= PChar(str+str);
end;

procedure fun2(p1, p2: pchar); stdcall;
var
  str: string;
begin
  str:= p1;
  StrCopy(p2,PChar(str+'#'+str));
end;

procedure Test(p: PChar); stdcall;
const
  Title = 'Title ';
var
  str: string;
begin
  str := p;
  StrCopy(p, Title);
  StrCat(p, PChar(str));
end;

exports
  fun1,
  fun2,
  Test;

begin
end.
测试程序代码:

procedure fun1(p1: pchar; var p2: pchar); stdcall; external 'dlltest1.dll';
procedure fun2(p1, p2: pchar); stdcall; external 'dlltest1.dll'; 
procedure Test(p: PChar); stdcall; external 'dlltest1.dll';

procedure TForm1.btn1Click(Sender: TObject);
var
  p: pchar;
begin
  fun1(PChar('123'),p);
  ShowMessage(p);
end;

procedure TForm1.btn2Click(Sender: TObject);
var
  arr: array of char;
  str: string;
begin
  SetLength(arr,100);
  fun2(PChar('123'),@arr[0]);
  str:= StrPas( @arr[0]);
  showmessage(str);
  setlength(arr,0);
end;

procedure TForm1.btn3Click(Sender: TObject);
var
  p: PChar;
begin
  Inc(num);
  p := StrAlloc(255);
  StrCopy(p, PChar(IntToStr(num)));
  Test(p);
  Text := p;
  StrDispose(p);
end;


MoveMemory原型;

procedure MoveMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
重点理解,string是字符数组,转化为指针的方式与一般数组一样:
procedure TForm1.btn2Click(Sender: TObject);
var
  str,str2: string;
  arr: array of char;
begin
  str:= '123465';
  SetLength(arr,length(str));
  MoveMemory(@arr[0],@str[1],6);
  str2:= StrPas(@arr[0]);
  ShowMessage(str);
end;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值