基本上,当我调用DeleteUrlCacheEntry(它是Wininet.dll API的一部分)时,我要么返回数字1(表示删除成功),要么返回数字0(表示删除不起作用)。

我的问题是,我如何找出为什么删除无效? (即返回0时)。我听说C ++中有一个GetLastError()函数,但是我使用的是VB6,显然VB6中的GetLastError等效项是Err.LastDllError属性。

尝试删除的DeleteUrlCacheEntry失败后(返回0),我调用/查询Err.LastDllError,并且始终返回0-无论如何。即使DeleteUrlCacheEntry返回0(删除不起作用),也返回0(删除确实起作用),它也将返回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中的声明:


  公共声明函数DeleteUrlCacheEntry Lib“ WININET”别名
  只要“ DeleteUrlCacheEntryA”(ByVal lpszUrlName作为字符串)


另外,我这样称呼它:


  Dim lReturnValue只要长
  
  昏暗的cacheFileString作为字符串
  
  'GetStrFromPtrA将Pointer(Long)转换为String。 cacheFileString是lpszSourceUrlName的实际文本/字符串,从指针(长整数)转换为String(人类可读的缓存文件名/字符串)。另外,cacheFileString可以从FindFirst / NextEntry函数中循环获取,因此不能设置错误格式或任何格式,因为在删除大多数其他项时也可以使用。
  
  cacheFileString = GetStrFromPtrA(icei.lpszSourceUrlName)
  
  lReturnValue = DeleteUrlCacheEntry(cacheFileString)


如果删除无效,则lReturnValue最终为0,如果删除无效,则为1。此外,Err.LastDllError始终返回0。

感谢您的协助。

最佳答案

我个人将在对DeleteUrlCacheEntry()的调用上设置一个断点,并逐步观察它在调用堆栈中的值。

除此之外,没有代码片段也无话可说。

07-24 21:16