c# - 如何获取DeleteUrlCacheEntry()错误代码? (或者有关为什么特定删除不起作用的其他信息)?

标签 c# vb.net winapi vb6 browser-cache

基本上,当我调用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 调用之后)。

我真的很困惑,因为我什至没有得到运行时错误或任何典型的异常(或任何与此相关的异常)。我没有 On Error Resume 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 中的声明:

Public Declare Function DeleteUrlCacheEntry Lib "WININET" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long

另外,我这样调用它:

Dim lReturnValue As Long

Dim cacheFileString As String

' GetStrFromPtrA turns Pointer (Long) to String. cacheFileString is the actual text/string of the lpszSourceUrlName turned from Pointer (Long) to String (human readable cache file name/string). Also, cacheFileString is retreived from FindFirst/NextEntry functions in a loop, so can't be incorrectly formatted or anything, as it also works when deleting most other items.

cacheFileString = GetStrFromPtrA(icei.lpszSourceUrlName)

lReturnValue = DeleteUrlCacheEntry(cacheFileString)

如果删除不起作用,则 lReturnValue 最终为 0;如果删除起作用,则 lReturnValue 最终为 1,仅此而已。此外,Err.LastDllError 始终返回 0。

感谢您的预期帮助。

最佳答案

就我个人而言,我会在对DeleteUrlCacheEntry()的调用上设置一个断点,并单步调试它,观察调用堆栈中的值是什么。

除此之外,如果没有代码片段,就没有什么可说的了。

关于c# - 如何获取DeleteUrlCacheEntry()错误代码? (或者有关为什么特定删除不起作用的其他信息)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12101969/

相关文章:

c# - 取消保护 Excel 工作表

c# - 显示选定的组合框项目显示名称

c++ - 使用 DirectX 捕获屏幕

python - 如何在拖放时隐藏窗口中的光标(可能是python,或其他语言)

c# - 无法创建 Azure WebSpace

c# - '已加载角色名为 X 的 RelatedEnd

c# - 哪个类用于 "Text Visualizer"?

c# - 我如何预先设置流?

c# - 需要从 VB 到 C# 的代码翻译

windows - 如何在 Windows 8 中扭曲/操纵 dwm 实时缩略图,或以任何其他方式访问窗口纹理?