2012-04-07 10 views
2

これは本当に申し訳ありませんが、Delphiにとって基本的なことはわかりません。Delphi xe2での指定されたクラスの変数の初期化

TIdSSLIOHandlerSocketOpenSSLのようなクラスの変数を宣言するときに、それをどのように開始する必要がありますか?明らかに文字列か整数の場合、必要な値は整数の文字列になりますが、この場合はそれほど明白ではありません。それを開始しないとアクセス違反が発生し、なぜそれについての記事が見つかったのかわかりますhere at about.com、しかしその記事では何を開始するか説明していません。以下は

私は変数のクライアントを開始していないため、アクセス違反を与えるコードで自分の無知のため

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

答えて

6
(これは、GUIのない​​アプリケーションがあります)

構文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を渡します。

オブジェクトを破棄するには、DestroyではなくFreeを呼び出します。これは重要ではありませんが、別のオブジェクトのデストラクタ内のオブジェクトを破棄する場合は非常に重要です。 Freeのトピックについて詳しく知りたい場合は、私が知っている限り、あなたにお問い合わせください。another answer of mineです。

+1

ありがとうございました。それは私が予想したよりも速かった! –

+1

素晴らしい。お力になれて、嬉しいです。 –

関連する問題