我在写一个能返回数组的函数但是好像delphi不支持数组不知道怎写呢?
还有返回指针的话怎么写呢?怎么调用呢?比如function ptest(i:integer):pointer;
begin
result:=@i;
end;procedure test;
begin
showmessage(ptest(3)); //这里面怎么写不是错误呢?
end;
还有返回指针的话怎么写呢?怎么调用呢?比如function ptest(i:integer):pointer;
begin
result:=@i;
end;procedure test;
begin
showmessage(ptest(3)); //这里面怎么写不是错误呢?
end;
解决方案 »
- delphi 局域网消息接收
- 奇怪,每次打开www.csdn.com,卡吧都会报病毒警告?
- 设置网卡为自动获取IP的API是什么呀?
- 任何查看控件源码?
- 小女子弱弱的问:Delphi开发数据库软件中是用什么控件实现数据库服务器和应用服务器的连接,应用服务器又通过什么控件和客户端程序连接的
- 表单打印问题(很急,各位兄台帮帮忙)
- 请问在treeview控件中怎样判断单击一个项目实现某些功能?
- 问一个大家都想问的问题:xml的网页如何保存
- 请教!如何在一个窗口中引用其他窗口定义的变量
- 怪问题!
- 想学delphi2009或者是c++builder2009,不知道学哪个好
- speedbutton 点击的时候如何显示矩形虚线?
type
TDynIntArr = array of Integer;function foo: TDynIntArr;
procedure StringToByteArr(str:string;var ByteArr:Array of Byte);
begin
move(str[1],ByteArr[0],Length(str));
end;
另外可以用引用,加个var,要不用 MOVE函数修改
因此内存必须是动态分配,包括使用动态数组。但是对于Delphi的动态数组由于是特殊格式,并且生成的代码当中会隐藏着对其的生命周期管理,也就是当你对一个数组进行SetLength分配内存之后,当它的“引用计数”为0时就会被清理,而这个引用计数的管理,当你跨过来了一个模块,则必须要采用公共的内存管理器才能够完成统一的计数管理,否则这个“引用计数”就不再有意义,出问题也是迟早的事。
除了使用动态数组以外,那就是动态内存的分配,而这个也跟数组相类似,但是省心一点的是不会生成几乎“不可见”的生命周期管理代码,换句话说,这个时候该内存的生命周期就完全掌握在你的手里,因为首先需要的就是内存管理器的统一,一般建议使用系统的API,或者使用C运行库,比如msvcrt.dll当中的内存管理函数,一句话就是要统一,否则错把公鸡当母鸡,就算是把整个鸡分成一千八百块,也达不到“杀鸡取卵”的效果。当这个统一之后,就是看由谁来进行申请,然后又由谁来进行释放。其实在这个过程当中,个人更为建议使用引用计数管理,如此就会清晰很多,谁要用,第一件事是增加一个属于自己的计数,从而保证该内存的生命周期延长至整个服务过程,用完再释放。其实对于引用计数的使用,COM是一个相当出色的模型,在Delphi当中使用Interface就可以很容易的完成相应的工作,对于应用代码,则只需要实现IInterface的接口就可以。