所以我一直在一个递归扫描 Windows 目录的基本程序中使用字符和宽字符。最初,我使用标准字符和字符串,以及一些相关函数来完成此任务(FindFirstFile、FindNextFile 等)。实际的递归通过 CreateThread 和 WaitForSingleObject 传递给创建的线程;它工作得很好,正如预期的那样。
但是,当我将这些字符、字符串和相关函数转换为它们的广泛对应函数(wchar_t、wstring、FindFirstFileW 等)时出现了一个问题。现在,当递归扫描具有多个文件夹的目录时,程序抛出异常/文件。异常发生在我的线程处理的 WaitForSingleObject 阶段。我已经追踪了有关异常本身的以下信息:
EAccessViolation是无效内存访问错误的异常类。
当应用程序发生以下情况时会引发 EAccessViolation:
取消引用 nil (Delphi) 或 NULL (C++) 指针。
写入为可执行代码保留的内存。
尝试访问没有分配给应用程序的虚拟内存的内存地址。
运行时异常信息保存在 EExternal 提供的字段中。
注意:应用程序不应直接引发 EAccessViolation,而应依赖运行时引发此异常。
我的问题是,当我唯一改变的是正在使用的字符类型时,为什么会抛出这个异常?我正在使用的 IDE 是 RAD Studio XE3 C++Builder,不幸的是,如果不对代码进行重大更改,我无法在我的其他 IDE 上进行真正的测试。