我很遗憾不得不问这个,但我显然不明白德尔福的一些基本要素.
当您声明类似TIdSSLIOHandlerSocketOpenSSL的类的变量时,您需要将其启动到什么位置?显然,如果它是一个字符串或一个整数,那么必需的值将是一个整数的字符串,但在这种情况下,它不那么明显(对于像我这样无能为力的人).不启动它会导致访问冲突,我理解为什么在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.
Run Code Online (Sandbox Code Playgroud)
为我的无知道歉,
ñ
您需要使用语法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;
Run Code Online (Sandbox Code Playgroud)
还用于try/finally在异常情况下保护对象的生命周期.该finally块将始终执行,前提是执行通过尝试.
要摧毁一个你应该打电话的对象Free而不是Destroy.这在这里无关紧要,但是在销毁另一个对象的析构函数中的对象时非常重要.要了解更多关于这个主题的信息,Free我会将你(我知道的不正确)推荐给我的另一个答案.