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

在Delphi xe2中初始化给定类的变量,delphi,delphi-xe2,Delphi,Delphi Xe2,我真的很抱歉要问这个问题,但我显然不理解Delphi的一些基本原理 当您声明一个类的变量(如TIdSSLIOHandlerSocketOpenSSL)时,您需要将其初始化为什么?显然,如果它是一个字符串或整数,那么必需的值将是一个整数上的字符串,但在这种情况下,它不那么明显(对于像我这样没有能力的人来说)。不启动它会导致访问冲突,我理解为什么在上面发现了一篇文章,但那篇文章没有解释启动什么 下面是导致访问冲突的代码,因为我没有启动变量客户端(这是一个没有gui的应用程序) 为我的无知道歉 N您需

我真的很抱歉要问这个问题,但我显然不理解Delphi的一些基本原理

当您声明一个类的变量(如TIdSSLIOHandlerSocketOpenSSL)时,您需要将其初始化为什么?显然,如果它是一个字符串或整数,那么必需的值将是一个整数上的字符串,但在这种情况下,它不那么明显(对于像我这样没有能力的人来说)。不启动它会导致访问冲突,我理解为什么在上面发现了一篇文章,但那篇文章没有解释启动什么

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

为我的无知道歉


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
块将始终执行,前提是执行通过try


要销毁对象,应该调用
Free
,而不是
destroy
。这在这里并不重要,但在销毁另一个对象的析构函数中的对象时非常重要。要了解更多关于
免费
的话题,我建议您(据我所知,这是最不礼貌的)。

非常感谢。这比我想象的还要快!
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;