ううーー、何週間かぶりに書きます。
サーバ引っ越しまして、せっかくなんでテーマもリニューアルしてから更新しようと思ってましたが、そのテーマのアイディアがとんと浮かばず、放置しておりました。
さて、はたと思いついて、久々にDelphi触ってました。やっぱいいですよね、静的言語。最近すっかりWebアプリ絡みの案件ばっかりと付き合わされてる身としては、コンパイラとかデバッガのメッセージがやけに親切に感じまして。
[エラー] Unit1.pas(xx): 宣言 が必要な場所に 'xxx' があります [致命的エラー] Project1.dpr(xx): 'Unit1.pas' ユニットはコンパイルできませんでした
とか、軽くツンデレな人格が伺えてしまうのも、気のせいではありますまい。
Turbo DelphiでIndy使って指定のSSLサイトをGetするだけの簡単なお仕事です、状態だったんですけど、
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdHTTP, IdSSLOpenSSL, StdCtrls, ExtCtrls, ComCtrls; type TForm1 = class(TForm) Panel1: TPanel; Memo1: TMemo; Button1: TButton; StatusBar1: TStatusBar; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; HTTP: TIdHTTP; SSL: TIdSSLIOHandlerSocketOpenSSL; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin SSL.SSLOptions.Method := sslvTLSv1; HTTP.ReadTimeout := 1000; HTTP.ConnectTimeout := 1000; HTTP.IOHandler := SSL; Memo1.Text := HTTP.Get('https://example.jp/test.php'); end; procedure TForm1.FormCreate(Sender: TObject); begin HTTP := TIdHTTP.Create(); SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil); end; procedure TForm1.FormDestroy(Sender: TObject); begin HTTP.Free; SSL.Free; end; end.
何度やってもデバッガちゃんに「Could not load SSL library」と怒られます。Indyは海外製のコンポーネントなんで、デバッガの中の人も金髪のお嬢さんなんでしょうな、なんとなく。
とりあえずssleay32.dllとlibeay32.dllを、http://indy.fulgan.com/SSL/にある最新のバージョンに入れ替えてみることに。が、NG。あらかじめDelphi5で似たようなの作ってたんで、そのときのバージョンに差し替えてみても、やっぱりだめ。これって本当にバージョンの問題か?
うーん、困った。と、よくよくhttp://indy.fulgan.com/SSL/のページを見てみると、「Archive」とかあるので、試しに覗いてみると、結構古いバージョンのもありまして、更新日時から推測するにTurbo Delphi発表当時に使われていたあろうブツ(indy_OpenSSL096m.zip)を仕入れ、インストール。
はい、動きました!
デバッガちゃんに叱られるの快感になりかけてまして。危ない危ない。