峻 峻祁连 Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #2 定义时指定不行吗? function FuncName () :String begin Result = 'Your returned string'; end; 不知道你说的是不是这个意思。
张 张无忌 Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #3 function FuncName () :TStrings begin Result:=TStrings.create; Result.add( 'Your returned string'); end;
function FuncName () :TStrings begin Result:=TStrings.create; Result.add( 'Your returned string'); end;
Y yzhshi Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #4 以下也许更好一些 procedure FuncName (returnstr:TStrings);
I ildg Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #5 非常感谢,呵呵, 我要返回一个TStrings类型的值 而不是一个string类型的值,怎么搞定呢?谢谢
I ildg Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #6 张无忌: 我在程序里面也是这样搞的, 用result.create,但由于create了没有释放, 我想问一下这样会不会有内存泄露呢?对不起我 不太懂,呵呵,能不能麻烦你帮我说一下这个,谢谢。 yzhshi: 你说的那个用过程我没看懂,不知道怎么一回事
张无忌: 我在程序里面也是这样搞的, 用result.create,但由于create了没有释放, 我想问一下这样会不会有内存泄露呢?对不起我 不太懂,呵呵,能不能麻烦你帮我说一下这个,谢谢。 yzhshi: 你说的那个用过程我没看懂,不知道怎么一回事
I ildg Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #9 hehe,张无忌,我们是同时回的文章,但你比我先发,其实我那篇是 回给峻祁连的,由于他的名字是中文并且很生僻,所以我没敲
张 张无忌 Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #10 用 tempStr:TStringList; tempStr:=FuncName ('aa'); tempStr.free;
Y yzhshi Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #11 就是说尽量在主程序里面创建TStringLIst,然后作为参数传递给子函数,由子函数处理,得出结果后写回去。 编程尽量遵循一个原则:在那里创建的东西,尽量在那里销毁。 var lst: TStringList; begin lst:=TStringList.Create; callfunction(lst); ... lst.Free; end; procedure ( var alst: TStringList) begin alst.Add(''); .. end;
就是说尽量在主程序里面创建TStringLIst,然后作为参数传递给子函数,由子函数处理,得出结果后写回去。 编程尽量遵循一个原则:在那里创建的东西,尽量在那里销毁。 var lst: TStringList; begin lst:=TStringList.Create; callfunction(lst); ... lst.Free; end; procedure ( var alst: TStringList) begin alst.Add(''); .. end;
I ildg Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #12 再次感谢张无忌,我是指在函数的内部: function FuncName () :TStrings begin Result:=TStrings.create; Result.add( 'Your returned string'); end; _______用result.create以后并没有释放, 也不可能释放,否则就没法返回值了.这时候 没释放会有问题吗?
再次感谢张无忌,我是指在函数的内部: function FuncName () :TStrings begin Result:=TStrings.create; Result.add( 'Your returned string'); end; _______用result.create以后并没有释放, 也不可能释放,否则就没法返回值了.这时候 没释放会有问题吗?
张 张无忌 Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #13 其实我认为yzhshi的办法应该更好一些,但是VCL原代码里面有一些和我写法相同的代码 我经常看的TServerSocket和TClientSocket里就有类似的代码,
Y yzhshi Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #14 指针传递回去,在主程序中释放,应该没有问题。 但是从程序规范性来说,尽量避免这种做法。 使用参数传递完全可以满足需求的。
张 张无忌 Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #15 但是你的程序后面必须释放这个资源,还有其实你返回的是一个指针
I ildg Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #16 或许编译器会释放内存吧, 毕竟result这个变量比较特殊。 不过我更想清楚地知道到底有没有问题。
B bigroute Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-03 #17 procedure FuncName (var returnstr:TStrings); begin ... end;
L lotostree Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-04 #18 我以前试过,Tstrings类不能作为参数返回。 后来我用了一个控件TMemo的Lines属性传递参数值,成功! 关注上述问题。
J jianguobu Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-04 #19 定义函数的时候定义一个TString 的变量就行了。
I ildg Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-04 #20 jianguobu说的是什么意思? 能说清楚点吗?谢谢