-1

任何想法如何解决?会非常有用。我尝试将一致性模式更改为关闭并且它工作但程序的其他部分失败了。还有其他修复吗?

有问题的线路:

RecursiveDelete(path, L"desktop.ini");

编辑 :

该程序是更改 windows 注册表文件并与我的 c++ 加载程序连接。当项目是独立的,没有连接到加载器时,它工作得很好。

4

1 回答 1

2

RecursiveDelete()函数有 2 个LPWSTR参数。 LPWSTR是 的别名wchar_t*,即指向非常量wchar_t数据的指针。但是,字符串文字是const数据,在这种情况下L"desktop.ini"是 a const wchar_t[12](包括空终止符),它衰减为const wchar_t*指针。您不能在预期的pointer-to-const地方使用 a pointer-to-non-const,这就是错误消息所抱怨的。

如果函数不改变其第二个参数的内容,则该参数实现为 a pointer-to-const,例如:

void RecursiveDelete(LPWSTR, LPCWSTR);

(又名void RecursiveDelete(wchar_t*, const wchar_t*);)。

如果更改函数的声明不是一个选项(即,它来自现有的 API 等),您可以使用const_cast(非常小心地这样做!)来抛弃字符串文字的常量,例如:

RecursiveDelete(path, const_cast<LPWSTR>(L"desktop.ini"));

但是,制作字符串文字数据的非常量副本会更安全,例如:

wchar_t copy[] = L"desktop.ini";
RecursiveDelete(path, copy);
于 2020-06-01T20:55:42.513 回答