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