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

标签 delphi delphi-xe2

我真的很抱歉不得不问这个问题,但我显然不了解 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/

相关文章:

delphi - System.IOUtils 中的 TPath 记录在哪里初始化?

arrays - Delphi boolean 返回函数提示 : Value assigned to '' never used?

delphi - 如何使用 TypInfo 单元获取 'record' 类型的属性

database - Delphi——数据库服务器

delphi - TStreamWriter (Auto)Flush 不行吗?

delphi - 在 TString 中搜索

windows - 在我的应用程序播放声音时将其他应用程序静音

delphi - DScintilla,代码折叠对我不起作用

delphi - 确定 TIBTransaction 是否有挂起的更改

delphi-xe2 - FinalBuilder 中内置的应用程序 GUI(带有 dcc32.exe)与 Embarcadero IDE 中内置的 GUI 不同