void file_explore(std::wstring str) {
ITEMIDLIST *pIDL = ILCreateFromPath(str.c_str());
if (NULL != pIDL) {
SHOpenFolderAndSelectItems(pIDL , 0 , 0 , 0);
ILFree(pIDL);
} else {
std::wstring p = str.substr(0 , str.find_last_of('\\'));
ShellExecute(NULL , L"explore" , p.c_str() , NULL , NULL , SW_SHOWNORMAL);
}
}
Вышеприведенных компилируется без предупреждения для 32-х, но с 64-битным, однако я получаю предупреждение c4090 документацию: https://msdn.microsoft.com/en-us/library/k77bkb8d.aspx состояния, что это ошибка переменного тока, и я буду получать C2440 для C++ но я использую C++.предупреждение C4090: «инициализация»: разные «__unaligned» отборочные
Строка кода жаловалась на это:
ITEMIDLIST *pIDL = ILCreateFromPath(str.c_str());
Как исправить эту проблему для 64-битной сборки?
Ваш проект, вероятно, определен как 'STRICT_TYPED_ITEMIDS', но вы используете общий' ITEMIDLIST * '. [ILCreateFromPath] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd378420.aspx) возвращает 'PIDLIST_ABSOLUTE'. Это один из строгих [ITEMIDLIST] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb773321.aspx), и вы должны назначить его одному типу. – IInspectable
Вы можете избавиться от предупреждения, используя тип, рекомендованный статьей MSDN: 'PIDLIST_ABSOLUTE pIDL = ILCreateFromPath (...); Использование LPITEMIDLIST также решает. –
^^ спасибо, в прошлый раз, когда я посетил, в рейтинге было какое-то мнение, но они, похоже, исчезли. – User666