基本的に、DeleteUrlCacheEntry(Wininet.dll APIの一部)を呼び出すと、番号1(削除が成功したことを意味します)または番号0(削除が機能しなかったことを意味します)が返されます。
私の質問は、削除が機能しなかった理由をどのように見つけることができますか?(つまり、0が返されるとき)。C ++にはGetLastError()関数があると聞きましたが、VB6を使用しており、VB6で同等のGetLastErrorはErr.LastDllErrorプロパティであるようです。
DeleteUrlCacheEntryの試行が失敗した後(0を返します)、Err.LastDllErrorを呼び出し/照会すると、何があっても常に0が返されます。DeleteUrlCacheEntryが0(削除が機能しなかった)を返した場合でも、1(削除が機能した)を返した場合でも、0を返します。また、Err.LastDllErrorの呼び出し/クエリをできるだけ早く行います(DeleteUrlCacheEntry呼び出しの直後のように)。
ランタイムエラーや一般的な例外(またはそのことに関する例外)さえも発生しないため、私は本当に混乱しています。アプリケーションのどこにも例外を無視するOnErrorResume Nextがないので、エラーが報告されるすべての手段を利用できますが、特定のDeleteUrlCacheEntry()の試行が失敗して0を返す理由を一生理解できません。 (私が知る方法はないようです)。
だから、私の質問は、DeleteUrlCacheEntry()関数(wininet.dll APIにある)から拡張エラー情報を取得するにはどうすればよいですか?
DeleteUrlCacheEntry()関数から拡張エラー情報を探している理由について詳しく知りたい場合は、これを詳しく説明する別の質問があります(削除時に機能するキャッシュアイテムと機能しないキャッシュアイテムの実際の例と一緒に)試行):https ://stackoverflow.com/questions/12096546/deleteurlcacheentry-function-of-wininet-api-not-deleting-some-internet-explo
また、追加するだけで、私はVB6を使用していますが、API呼び出しであるため、基本的にほとんどの言語で同じである必要があります。これがVB6での私の宣言です:
パブリック宣言関数DeleteUrlCacheEntryLib"WININET"エイリアス"DeleteUrlCacheEntryA"(ByVal lpszUrlName As String)As Long
また、私はそれを次のように呼んでいます:
Dim lReturnValue As Long
Dim cacheFileString As String
'GetStrFromPtrAは、ポインタ(Long)を文字列に変換します。cacheFileStringは、ポインタ(ロング)から文字列(人間が読める形式のキャッシュファイル名/文字列)に変換されたlpszSourceUrlNameの実際のテキスト/文字列です。また、cacheFileStringはループ内のFindFirst / NextEntry関数から取得されるため、他のほとんどのアイテムを削除するときにも機能するため、誤った形式などにすることはできません。
cacheFileString = GetStrFromPtrA(icei.lpszSourceUrlName)
lReturnValue = DeleteUrlCacheEntry(cacheFileString)
lReturnValueは、削除が機能しなかった場合は0になり、削除が機能した場合は1になります。これがそれです。また、Err.LastDllError
常に0を返します。
皆様のご支援をよろしくお願いいたします。