#c #winapi #visual-studio-2015 #uwp
#c #winapi #visual-studio-2015 #uwp
Вопрос:
Приведенный ниже код отлично работает с отладочной сборкой, но с выпуском createFile2 возвращает код ошибки 87, т.е. invalid_parameters.
путь одинаков как для отладки, так и для сборки релиза.
Host_IO::FileRef fileHandle;
#ifdef WIN_UNIVERSAL_ENV
CREATEFILE2_EXTENDED_PARAMETERS params;
params.dwFileAttributes = (FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS);
params.lpSecurityAttributes = 0;
params.hTemplateFile = 0;
params.dwFileFlags = 0;
params.dwSecurityQosFlags = SECURITY_ANONYMOUS;
fileHandle = CreateFile2((LPCWSTR)wideName.data(), (GENERIC_READ | GENERIC_WRITE), 0, CREATE_ALWAYS, amp;params);
#else
fileHandle = CreateFileW ( (LPCWSTR)wideName.data(), (GENERIC_READ | GENERIC_WRITE), 0, 0, CREATE_ALWAYS,
(FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS), 0 );
#endif
if ( fileHandle == INVALID_HANDLE_VALUE ) XMP_Throw ( "Host_IO::Create, cannot create file", kXMPErr_InternalFailure );;
CloseHandle ( fileHandle );
Комментарии:
1. Это не настоящий код, потому что проверка кода ошибки отсутствует. Вы не можете определить, что такое код ошибки, потому что вы никогда не спрашиваете об этом.
2. @DavidHeffernan я предполагаю, что они заменили вызов на
XMP_Throw()
тот, который печаталсяGetLastError()
. Я просмотрел исходный код XMP SDK, и он не вызываетGetLastError()
свою систему исключений.3. @David, на самом деле я добавил вызов GetLastError во время отладки и обнаружил, что он возвращает 87 в качестве кода ошибки при копировании, вставляя этот код, я каким-то образом удалил его.
4. Просить нас посмотреть код, который не соответствует тому, что у вас есть, контрпродуктивно
Ответ №1:
CREATEFILE2_EXTENDED_PARAMETERS
начинается с dwSize
поля; вы должны правильно инициализировать sizeof (CREATEFILE2_EXTENDED_PARAMETERS)
его, как и любую другую структуру Windows API с dwSize
полем. (Вы также должны инициализировать остальную часть структуры нулем, просто на всякий случай.)