基本上,当我调用 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 中的声明:
公开声明函数 DeleteUrlCacheEntry Lib "WININET" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) 只要
另外,我这样称呼它:
将 lReturnValue 变暗
将 cacheFileString 调暗为字符串
' GetStrFromPtrA 将 Pointer (Long) 转换为 String。cacheFileString 是 lpszSourceUrlName 的实际文本/字符串,从 Pointer (Long) 变为 String(人类可读的缓存文件名/字符串)。此外,cacheFileString 是从循环中的 FindFirst/NextEntry 函数中检索的,因此不能错误地格式化或任何其他内容,因为它在删除大多数其他项目时也有效。
cacheFileString = GetStrFromPtrA(icei.lpszSourceUrlName)
lReturnValue = DeleteUrlCacheEntry(cacheFileString)
如果删除不起作用,lReturnValue 最终为 0,当删除起作用时,lReturnValue 最终为 1,仅此而已。此外,Err.LastDllError
始终返回 0。
感谢您期待的帮助。