いつも皆様にお世話になっております。ある時点から突然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。
コンポーネント IEDownload は使ったことがありませんが、
・使用しているコンポーネントが最新版でなければ、最新版を入手する。
・コンポーネントの作成者に質問してみる
などは、どうですか?
igvさん、ご助言ありがとうございます。
私も、そのように考えて、アメリカのサイトですがサイトがなくなっているのです。
おかしくなる以前にコンパイルしたアプリケーションは正常に動作しています。
書き忘れましたが、Windowsの「すみません・・・送信しますか」というエラーもでますから、冷静に考えてみると、たぶん、Windowsのアップデートと関係するのかもしれません。コンパイルエラーはでませんので。
とりあえず、性能の劣るURLDownloadToFile()に戻してみようと思います。
ところで、皆様は、Webサイトのファイルのダウンロードは、どんなコンポーネントでダウンロードしておられますか?
できれば、ご紹介願えないでしょうか。
よろしくお願いいたします。
私も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
Fusaさん、貴重なアドバイスをありがとうございました。
かねがねIndyは、聞いていいましたが、どのようなものか具体的に知りませんでした。
おかげで、とっつきができました。
これから勉強をしていきます。
感謝します。では。
ツイート | ![]() |