私はこの問題で提起されたものと非常によく似た問題を抱えています(SSL dll をロードする「問題」のため、最初のロードで 2 回接続する必要があります)。ただし、Indy の最新バージョンを使用していると確信しています。そこで提案された解決策は私の問題を解決しません。
私は Delphi7 を使用していますが、Delphi7 インストーラーから Indy をインストールしないことにしました。Indy10 (SVN ソースから) をダウンロードしてインストールする前に、最新の SVN ソースから Indy9 をインストールしましたが、Indy9 の代わりに新しい Indy10 コンポーネント/パスを使用するように IDE とプロジェクト設定を再構成しました。明らかに、プロジェクトはビルドに Indy10 を使用しています。コンパイルするためにすべての Indy10 シグネチャに一致させるために変更しなければならなかったメソッドがかなりあるからです。
Indy10 の私の SVN リポジトリはhttps://svn.atozed.com:444/svn/Indy10/trunk/Libからチェックアウトされ、約 2 週間前の 4972 の最後のコミット リビジョンを示しています。本当に古いバージョンの Indy10".
Win32 用の OpenSSL 1.0.1e をhttp://opendec.wordpress.com/のバイナリ ビルドからダウンロードし(前述の他のスタック オーバーフローの質問で推奨されている場所)、ビルドした .exe と同じフォルダーに配置しました。
SSL接続を開くために現在使用しているコードは次のとおりです。
try
POP.Connect(Server,Port,Protocol,UserName,Password,TimeOut);
Except
on e : EIdOSSLCouldNotLoadSSLLibrary do
begin
ShowMessage('Failed to load: ' + WhichFailedToLoad());
POP.Connect(Server,Port,Protocol,UserName,Password,TimeOut);
end;
end;
しかし...これはEIdOSSLCouldNotLoadSSLLibrary例外を引き起こし、WhichFailedToLoadを追加するとまったく同じコンポーネントのリストが表示されます。これは、OpenSSLの「インディ固有」バージョンを期待していることを示唆しています:
しかし、ちょっと待ってください... Remy は、リンクされた質問で、「Indy 10 が更新され、カスタムビルドの DLL が不要になりました。標準化された OpenSSL DLL をそのまま使用するようになりました」と答えました。では、Indy 固有の機能が必要であると不平を言うのはなぜでしょうか?
初めて接続に失敗した理由/必要ではないことを理解している機能が必要であると言っている理由をトラブルシューティングするにはどうすればよいですか? インディ固有の機能を探すべきではないという私の期待は間違っていますか?