函数返回参数可以是一个包含多个结果的集合吗(分不够再加)

xflin 2004-10-13 09:07:00
在DELPHI中可以像JAVA一样,在函数中返回类似于Vector一样的集合吗?我需要返回一个包含多个结果的集合,DEPHI中可以支持吗?我查了很多资料,好像在DELPHI中函数返回的参数只能一个。大家帮忙解决一下哈,分不够再加。
...全文
198 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
knife_s 2004-10-22
  • 打赏
  • 举报
回复
其实可以变通的,带传址参数就行了,把需要返回的值写在传址参数里就可以了
victor_yang 2004-10-22
  • 打赏
  • 举报
回复
var
vVector:Olevariant;
begin
vVector:=vararraycreate([0,n],varvariant);
vVector[0]:='abc';
vVector[1]:=123;
vVector[2]:=1.23;
.
.
.
YourFunction(vVector);
FreeAndNil(vVector);
end;

procedure YourFunction(aVector:OleVariant);
var
v1:String;
v2:Integer;
v3:real;
begin
v1:=aVector[0];
v2:=aVector[1];
v3:=aVector[2];
ShowMessage(format('1是''%s'',2是%d,3是%g',[v1,v2,v3]));
end;
不知道楼主是否满意?
xflin 2004-10-21
  • 打赏
  • 举报
回复
谢谢各位,我对于vector_yang的方案比较感兴趣,,由于我是初学,希望vector_yang能够写得更详细一点,谢谢各位了。
jinjazz 2004-10-20
  • 打赏
  • 举报
回复
type
Txxx = packed record
a : char;
b : char;

end;
goodloop 2004-10-20
  • 打赏
  • 举报
回复
可以啊..自定义一个类型就好了
victor_yang 2004-10-19
  • 打赏
  • 举报
回复
var
vVector:Olevariant;
begin
vVector:=vararraycreate([0,n],varvariant);
vVector[0]:='abc';
vVector[1]:=123;
vVector[2]:=1.23;
.
.
.
YourFunction(vVector);
end;
明白吗?
xflin 2004-10-18
  • 打赏
  • 举报
回复
怎么样自定义集合啊?
liuqifeiyu 2004-10-13
  • 打赏
  • 举报
回复
返回一个数组类型的不行吗?
hailang_zh 2004-10-13
  • 打赏
  • 举报
回复
自定义集合啊,什么都能返回的。
anbeel 2004-10-13
  • 打赏
  • 举报
回复
procedure TForm1.FormButton1Click(Sender: TObject);

type
PMyList = ^AList;
AList = record
I: Integer;
C: Char;
end;

var

MyList: TList;
ARecord: PMyList;
B: Byte;
Y: Word;
begin
MyList := TList.Create;
try
New(ARecord);
ARecord^.I := 100;
ARecord^.C := 'Z';
MyList.Add(ARecord); {Add integer 100 and character Z to list}
New(ARecord);
ARecord^.I := 200;
ARecord^.C := 'X';
MyList.Add(ARecord); {Add integer 200 and character X to list}

{ Now paint the items onto the paintbox}
Y := 10; {Variable used in TextOut function}

for B := 0 to (MyList.Count - 1) do
begin
ARecord := MyList.Items[B];
Canvas.TextOut(10, Y, IntToStr(ARecord^.I)); {Display I}
Y := Y + 30; {Increment Y Value again}
Canvas.TextOut(10, Y, ARecord^.C); {Display C}
Y := Y + 30; {Increment Y Value}
end;

{ Cleanup: must free the list items as well as the list }
for B := 0 to (MyList.Count - 1) do
begin

ARecord := MyList.Items[B];
Dispose(ARecord);
end;
finally
MyList.Free;
end;
end;
xflin 2004-10-13
  • 打赏
  • 举报
回复
能不能给出具体例子,搞定后,再50分并立即结分
anbeel 2004-10-13
  • 打赏
  • 举报
回复
看看TList例子
xflin 2004-10-13
  • 打赏
  • 举报
回复
我要求返回的参数是不定的,我现在要做的是,返回符合条件的窗口句柄和窗口上的一个控件句柄,而且是一,一对应的,也就是说要返回类似一张二维表的东西,由于我并不知道符合条件的窗口有多少,所以我要求有多少就返少,该怎么做啊?最好不要使用全局变量。
first_lover 2004-10-13
  • 打赏
  • 举报
回复
先定义一个记录
TDemo = record
astr1 : string;
astr2 : string;
end;
然后代码如下:
function TForm1.setValue(var aDemo : TDemo) : Boolean;
begin
result := true;
try
aDemo.astr1 := 'astr1';
aDemo.astr2 := 'astr2';
except
result := false;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
aDemo : TDemo;
begin
try
if setValue(aDemo) then
begin
Memo1.Lines.Add(aDemo.astr1);
Memo1.Lines.Add(aDemo.astr2);
end;
except
Memo1.Lines.Add('wrong');
end;

end;

也就是将多个返回结果放在一个记录中,作为一个变量返回。
wycg_cnh20 2004-10-13
  • 打赏
  • 举报
回复
例子:
TYourTest=('12','123','3213');
TAssembly =Set of TYourTest;
function YourFunction :TAssemBly;
begin
..........................
end;
1_ 2004-10-13
  • 打赏
  • 举报
回复
可以通過全局變量實現。
beyondtkl 2004-10-13
  • 打赏
  • 举报
回复
那你就定义返回 record 或者

aaa(var return1...var returnN..) 做为【in/out】参数返回
wycg_cnh20 2004-10-13
  • 打赏
  • 举报
回复
当时你可以自己定义一个你自己想要的集合类型出来作为返回参数
wycg_cnh20 2004-10-13
  • 打赏
  • 举报
回复
是的,只能支持一个
xflin 2004-10-13
  • 打赏
  • 举报
回复
给全行吗?把代码给全行吗?
加载更多回复(3)
内容概要:本文是一份关于基于IKE方式实现IPSec VPN隧道建立的实验报告,详细介绍了通过IKEv1主模式、野蛮模式以及IKEv2方式建立IPSec安全关联(SA)的过程。实验涵盖多种场景,包括不同IKE版本的报文交互机制、模板方式配置中心-支结构的IPSec隧道,以及NAT穿越功能的实现。文中提供了完整的网络拓扑设计、设备配置命令(如华为路由器与防火墙)、ACL策略、IKE提议与对等体设置、IPSec安全策略应用,并通过抓包析验证各模式下ISAKMP报文交互流程。实验结果表明,IKE能够动态协商生成SA和SPI,提升安全性;IKEv1主模式需9个报文(前4个明文),野蛮模式6个报文(第3个起加密);而IKEv2仅需4个报文且更高效安全。此外,模板方式适用于集中管理的VPN架构,NAT-T可检测并适应中间NAT设备,确保隧道成功建立。; 适合人群:具备网络基础知识及一定路由与交换技术背景的网络工程师、信息安全技术人员或高校通信类专业学生,尤其适合正在学习或部署IPSec VPN的技术人员。; 使用场景及目标:①深入理解IKEv1与IKEv2在IPSec隧道建立中的工作机制差异;②掌握主模式与野蛮模式的报文交互特点及其应用场景;③学会配置基于模板的动态IPSec隧道以支持多支接入;④实现NAT穿越环境下的IPSec通信;⑤通过实际抓包析验证理论知识。; 阅读建议:本实验报告强调理论与实践结合,建议读者在模拟器(如eNSP)中复现实验拓扑,逐步配置并使用Wireshark等工具抓包析各阶段ISAKMP/IKE报文,重点关注加密范围、协商顺序与NAT-T检测机制,以加深对IPSec密钥交换机制的理解。
源码下载地址: https://pan.quark.cn/s/2def6e303a6c download-manager build release language Hex.pm Chrome Web Store Version Chrome Web Store Users Chrome Web Store Rating Microsoft Edge Version Microsoft Edge Rating 谷歌浏览器下载管理器插件 点击插件图标即可查看所有下载文件状态 语言 简体中文 | English 下载安装 Chrome Web Store 、 Microsoft Edge Add-ons 隐私政策说明 功能 下载文件百比进度显示 下载文件可暂停、恢复下载、取消、删除、重试 搜索所有已经下载的文件 下载危险文件时显示是否确认下载的提示框 右键复制文件名和下载链接到剪切板 下载过程中通知 下载完成提示音 快捷键 手动下载文件功能 右键下载菜单 自定义图标颜色 自定义主题 支持的语言 、、、、、 这是使用谷歌翻译后的结果,如果您有更好的建议,请创建Issues或发邮件! 步骤: 所有翻译文件位置:public/_locales/\\/*.json 进入对应语言的目录 复制、下载或者Pull Request修改后的文件,我会在检查核对后尽快上线 未来计划 以下计划按先后顺序依次开发: 解决重试下载失败文件变成新创建下载的问题 自定义下载面板主题 强迫症系列:只显示下载文件名称、下载面板停止显示飞入飞出动画 代理设置 Info 1. 最新版本:1.1.3 新增: 下载通知可一直保留在屏幕上 自定义下载面板页面大小。 设置 -> 主题 -> 下载面板 编译打包 ...

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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