Потратив немного больше времени на это, мы наконец решили использовать другой подход, который работал для меня.
Итак, мы преобразовали wchar_t * в строку, используя этот метод:
// Converts LPWSTR to string
bool convertLPWSTRToString(string& str, const LPWSTR wStr)
{
bool b = false;
char* p = 0;
int bSize;
// get the required buffer size in bytes
bSize = WideCharToMultiByte(CP_UTF8,
0,
wStr,-1,
0,0,
NULL,NULL);
if (bSize > 0) {
p = new char[bSize];
int rc = WideCharToMultiByte(CP_UTF8,
0,
wStr,-1,
p,bSize,
NULL,NULL);
if (rc != 0) {
p[bSize-1] = '\0';
str = p;
b = true;
}
}
delete [] p;
return b;
}
И затем сохранил эту строку в наборе, делая это, мне не пришлось беспокоиться о сравнении сохраняемых элементов, чтобы убедиться, что все записи уникальны.
// set that will hold unique path
set<string> strSet;
Итак, все, что мне нужно было сделать, это:
string str;
convertLPWSTRToString(str, FileName);
// store path in the set
strSet.insert(str);
Хотя я до сих пор не знаю, что вызывало проблему «Ошибка отладки» при использовании a set comparator (PathComp) for set<wchar_t*,PathComp> pathSet;