Indy 10(9)
 Indy10やIndy9は、ネットワーク系のコンポーネントを提供してくれるパッケージだが、これもかなり不都合があるようで、私は使うようになるまでに一苦労した。ここでは私が苦労した部分の説明だけ書きたいと思う。
○Indy
 ここでは、以下のような不具合などについて書く。
  1. インストール方法
  2. TIdHTTPの「日付に変換できない値が渡されました」
  3. TIdHTTPで302エラー
 これらについては本当に手を焼いた。
インストール
 まずはインストール。これも本当に大変だった。ここではDelphi 6 Personalを使用したとする。「〜〜60」というファイルをインストールすればよいのだが、これらには順番があるらしく、一度失敗するとすべてアンインストールしてから再度挑戦となる。順番は以下の通りだが、似た名前のファイルがたくさんあるので注意して欲しい。

・...\Indy\System\IndySystem60.dpk
・...\Indy\Core\IndyCore60.dpk
・...\Indy\Protocols\IndyProtocols60.dpk

 これらをインストールするときは、「オプション」で、パッケージの種類の「設計/実行時とも使用可能」にチェックを入れる。インストールしたら「×」を押して保存する。
 つぎに、以下のファイルを以下の順番でコンパイル&インストールする。今回はオプションをいじる必要はない。だが、コンパイルの必要がある。

・...\Indy\Core\dclIndyCore60.dpk
・...\Indy\Protocols\dclIndyProtocols60.dpk

 この辺には似たファイルがあるので要注意だ。ここで間違うと再インストールとなる。

 これでインストールは終わりだ。何度も言うようだが、ファイル名には細心の注意を払っていただきたい。
TIdHTTPの「日付に変換できない値が渡されました」
 これはWebページのヘッダの問題だ。Expires:-1が指定されていると出るようだが、Indyのバグではないため原因の発見は難しかった。Indy9では、Expiresに空の値が入っていてもこの例外が出るが、Indy10では空の値には対応したようだ。だが-1や0には、未対応なので、これらに対応する必要がある。
 まず確認する必要があるのは、「*.dcu」があるかどうかだ、Indy10フォルダに「System」や「Core」などのフォルダがあるが、その中の「*.pas」がすべてコンパイルされているか、を確認する。もしされていない場合は、上のインストールで、最初の3つのコンパイルをしていないファイルをコンパイルする。これで完了だ。
 次に、「IdGlobalProtocols.pas」をプロジェクトに追加する。そして、「GMTToLocalDateTime関数」の中を修正する。修正箇所は以下の通りだ。

if s = '' then
begin
  result := 0;
end
else
begin
  Result := RawStrInternetToDateTime(S);

 こんな感じの部分があるはずだ。もう気づいていると思うが、1行目に-1のときと0のときの処理を追加するだけだ。

if(s = '')or(s = '-1')or(s = '0')then
begin
  result := 0;
end
else
begin
  Result := RawStrInternetToDateTime(S);

 こうだ。あとはコンパイルしたら再インストールするだけでよい。どうせなら以下のバグを直してからインストールしなおしたほうがいいだろう。
TIdHTTPの302エラー
 これはたいしたことはない。ただRFCで302が定義されているのに、ここで予期できないのはおかしい。これで悩む人もいると思うが、単に「HandleRedirects」をTrueにすればいいだけ。また、「IdHTTP.pas」の「Id_TIdHTTP_HandleRedirects」を最初からTrueにしておくのもいいだろう。


Back
Copyright©2004-2005 gabyou All Rights Reserved.
NOTES Software