urlMonのエラーがでるようになりました。

解決


武田  2006-06-23 21:19:31  No: 22262

いつも皆様にお世話になっております。ある時点から突然urlmon.dllのエラーがでるようになって原因がわかりません。ご指導をいただけないでしょうか。
環境  WindowsXP  Delphi6 Personalです。
インターネットのファイルをダウロードするプログラムを作成していますが
ある時点から次にようなエラーがでます。
「Exception EAccessViolation in module URLMON.DLL at 00014411.
Access violation at address 75C54411 in module 'URLMON.DLL'. Read of address 00000548.

私なりに調査したところ、ファイルダウンロードのコンポーネントIEDownloadが動作するときの感じです。
これは、 URLDownloadToFile()の代わりに使用しています。
一年近くIEDownloadコンポーネントを使用して問題なくきたのですが、エラーがでるため、
IEDownloadの削除、再インストール、それでも解決しないため、Delphiの再インストール、それでも解決しないためWindowsの再インストールもしました。
ちなみにURLDownloadToFile()に戻すとエラーはでないみたいです。
また、新しくインストールしたコンポーネントはありません。
なお、IEDownloadを使用しているソースプログラムは従来作動していたプログラム全部です。
何かヒントがありましたらご指導をお願いいたしますm(_ _)m。


igy  2006-06-23 22:31:41  No: 22263

コンポーネント IEDownload は使ったことがありませんが、
・使用しているコンポーネントが最新版でなければ、最新版を入手する。
・コンポーネントの作成者に質問してみる
などは、どうですか?


武田  2006-06-24 10:00:05  No: 22264

igvさん、ご助言ありがとうございます。
私も、そのように考えて、アメリカのサイトですがサイトがなくなっているのです。
おかしくなる以前にコンパイルしたアプリケーションは正常に動作しています。
書き忘れましたが、Windowsの「すみません・・・送信しますか」というエラーもでますから、冷静に考えてみると、たぶん、Windowsのアップデートと関係するのかもしれません。コンパイルエラーはでませんので。
とりあえず、性能の劣るURLDownloadToFile()に戻してみようと思います。
ところで、皆様は、Webサイトのファイルのダウンロードは、どんなコンポーネントでダウンロードしておられますか?
できれば、ご紹介願えないでしょうか。
よろしくお願いいたします。


Fusa  2006-06-25 04:24:20  No: 22265

私もIDDownloadなるコンポーネントは知りませんが

・アクションのTDownLoadURLを使う方法
・UrlDownloadToFile関数を使う方法
・Indyを使う方法
・WinInet.DLLを使う方法

がありますね。
TDownLoadURLは内部的にはUrlDownloadToFile関数を使っていると
思います。

Indyの場合は次のようにします。

//Indyを使う方法
//IndyのVersionは9.0.14
procedure TForm1.Button4Click(Sender: TObject);
var
  SaveFileName, SaveURL: String;
  fs: TFileStream;
begin
  SaveURL := Edit1.Text;
  SaveFileName := StringReplace(SaveURL, 'http://',
                    ExtractFilePath(Application.ExeName), [rfIgnorecase]);
  SaveFileName := StringReplace(SaveFileName, '/', '\', [rfReplaceAll]);
    ForceDirectories( ExtractFileDir( SaveFileName ));
  ForceDirectories( ExtractFileDir( SaveFileName ));

  fs := TFileStream.Create(SaveFileName, fmCreate); try
  IdHTTP1.Get(SaveURL, fs);
  finally fs.Free; end;
  //別の取得方法として
  //IdHTTP1.Get(SaveURL)とすると
  //指定URLの内容が文字列で取得できる
end;

参考────────────────────
Creation College -WebApplication Labo- : 
http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
Lupin Delphi Tips :
http://lupin.client.jp/delphi/#44
Indy Tips
http://www.monazilla.org/document/indytips.html

WinInetを使う方法は下記を参照。

参考────────────────────
Wininet Programing
http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/
プロペラ共和国(仮)Wininet.dllを使う
http://homepage1.nifty.com/~suzuki/delphi/wininet.html


武田  2006-06-25 08:05:59  No: 22266

Fusaさん、貴重なアドバイスをありがとうございました。
かねがねIndyは、聞いていいましたが、どのようなものか具体的に知りませんでした。
おかげで、とっつきができました。
これから勉強をしていきます。
感謝します。では。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加