怎么返回多个pchar 呢???

大悟还俗 2012-12-28 03:35:30
// 这里的 funTest函数应该怎么写 ???

function funTes(…… ,abc:array of pchar):Boolean;stdcall;
begin

end;

如 我传入
var
aa:array of pchar;
i:integer;
begin

funTest(aa,['aaa','bbb','ccc']);

for i:=0 to length(aa)-1 do
begin
showmessage(aa[i])
end;
// 这里的 funTest函数应该怎么写 ???
end;


因为要把函数放在dll里,所以才用pchar的…… 那位大牛,帮我写写吧, 谢谢了
...全文
504 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yadan_tanchfeng 2012-12-29
  • 打赏
  • 举报
回复
引用 3 楼 simonhehe 的回复:
Delphi/Pascal code?12345678910111213141516171819202122232425262728293031323334type TMyArr = array of pchar;{$R *.dfm}function funTest(var aa : TMyArr; abc:array of pchar):Boolean;stdcall……
taixinltd 2012-12-28
  • 打赏
  • 举报
回复
type
PPCharArray=^TPCharArray;
TPCharArray=Array of PChar;

function funTes(var vlist:PPCharArray;abc:array of pchar):Integer;stdcall;
var
i,nlen,nsize:Integer;
p1:PChar;
begin
nlen:=length(abc);
vlist:=new(PPCharArray);
SetLength(vlist^,nlen);

for i:=0 to nlen-1 do
begin
nsize:=StrLen(abc[i])+1;
p1:=StrAlloc(nsize);
strcopy(p1,abc[i]);
vlist^[i]:=p1;
end;
result:=nlen;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
aa:PPCharArray;
i,nWriteLen:integer;
begin
nWriteLen:=funTes(aa,['aaa','bbb','ccc']);
for i:=0 to nWriteLen-1 do
begin
showmessage(aa^[i])
end;

// 记得释放哦
end;
大悟还俗 2012-12-28
  • 打赏
  • 举报
回复
我把funTest函数是放在dll里的,怎么释放 tMyArr定义的aa这个变量呢
大悟还俗 2012-12-28
  • 打赏
  • 举报
回复
非常谢谢, 我试试先
simonhehe 2012-12-28
  • 打赏
  • 举报
回复
刚才的有个错 aa[i] := GetMemory(length(snewStr) * 2); //分配内存 改为------------------------------------------ aa[i] := GetMemory(length(snewStr) * sizeof(string)); //分配内存
simonhehe 2012-12-28
  • 打赏
  • 举报
回复

type
  TMyArr = array of pchar;
{$R *.dfm}
function funTest(var aa : TMyArr; abc:array of pchar):Boolean;stdcall;
var
  i : Integer;
  snewStr : string;
begin
  SetLength(aa, length(abc));

  for I := Low(abc) to High(abc) do
  begin
    snewStr := StrPas(abc[i]) + '_funTest';
    aa[i] := GetMemory(length(snewStr) * 2); //分配内存
    StrPCopy(aa[i], snewStr); //将值复制到分配的内存中。
  end;
end;

procedure TForm11.btn1Click(Sender: TObject);
var
  aa:TMyArr;
  i:integer;
begin

   funTest(aa,['aaa','bbbb','ccc']);

   for i := Low(aa) to High(aa) do
     showmessage(aa[i]);  //显示


   for i :=Low(aa) to High(aa) do
     FreeMemory(aa[i]);   //释放内存

end;
UnkownState 2012-12-28
  • 打赏
  • 举报
回复
多个参数,或者一个长字符串自己解析
大悟还俗 2012-12-28
  • 打赏
  • 举报
回复
我要的是要返回 'aaa','bbb','ccc'

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧