gpt4 book ai didi

delphi - 在 Delphi xe2 中初始化给定类的变量

转载 作者:行者123 更新时间:2023-12-03 18:19:26 26 4
gpt4 key购买 nike

我真的很抱歉不得不问这个问题,但我显然不了解 Delphi 的一些基本知识。

当你声明一个像 TIdSSLIOHandlerSocketOpenSSL 这样的类的变量时,你必须将它初始化到什么地方?显然,如果它是一个字符串或一个整数,那么必要的值将是一个整数上的字符串,但在这种情况下它不太明显(对像我这样无能的人来说)。不启动它会导致访问冲突,我理解为什么找到一篇关于它的文章 here at about.com ,但那篇文章没有解释开始的目的。

下面是给出访问冲突的代码,因为我还没有启动变量客户端(这是一个没有 gui 的应用程序)

program New;

uses
Windows, Messages, SysUtils, Variants, Classes,
Sockets, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack,
IdServerIOHandler, IdSSL, IdSSLOpenSSL;


function Handshake(target: string; port: integer) : string;
var client: TIdSSLIOHandlerSocketOpenSSL;
begin
client.Create();
client.Port := port;
client.Destination := target;
client.Destroy;
end;


begin

Handshake('127.0.0.1',15);

end.

为我的无知道歉

N

最佳答案

您需要使用语法 TIdSSLIOHandlerSocketOpenSSL.Create 来调用构造函数并将结果保存到实例变量:

function Handshake(target: string; port: integer) : string;
var
client: TIdSSLIOHandlerSocketOpenSSL;
begin
client := TIdSSLIOHandlerSocketOpenSSL.Create;
try
client.Port := port;
client.Destination := target;
Result := ...;//don't forget to assign the return value to something
finally
client.Free;
end;
end;

还可以使用 try/finally 来保护对象在遇到异常时的生命周期。 finally block 将始终执行,前提是执行通过了 try。

要销毁对象,您应该调用 Free 而不是 Destroy。这在这里无关紧要,但是当您在另一个对象的析构函数中销毁对象时非常重要。要了解有关 Free 主题的更多信息,我建议您(我知道这是不谦虚的)another answer of mine .

关于delphi - 在 Delphi xe2 中初始化给定类的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10056272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com