Ich versuche, eine DDS-Datei mit meinem DirectX 11-Projekt zu öffnen, aber in den meisten Fällen weigert es sich, es zu öffnen. Immer wenn es fehlschlägt, erhalte ich E_ACCESSDENIED Fehler. Die einzige Möglichkeit, es zum Laufen zu bringen, besteht darin, den relativen Pfad zum aktuellen Verzeichnis oder Unterverzeichnis zu setzen. Wenn es sich um einen relativen Pfad zu einem übergeordneten Verzeichnis handelt oder wenn es sich um einen absoluten Pfad handelt, schlägt die Funktion fehl.Kann Dateien in C++ nicht öffnen (DirectX-App) Zugriff verweigert
Das Problem ist, dass ich wünschte, das Bild zu öffnen FileOpenPicker verwenden, so in allen Fällen, ich einen absoluten Pfad zu bekommen ...
Ich werde meine Funktionen teilen:
void Element::FileOpenDialog()
{
FileOpenPicker^ fileOpenPicker = ref new FileOpenPicker();
fileOpenPicker->ViewMode = PickerViewMode::Thumbnail;
fileOpenPicker->SuggestedStartLocation = PickerLocationId::PicturesLibrary;
fileOpenPicker->CommitButtonText = "Load";
fileOpenPicker->FileTypeFilter->Append(".dds");
create_task(fileOpenPicker->PickSingleFileAsync()).then([this](StorageFile^ file)
{
if (file)
{
m_fullPath = const_cast<wchar_t*>(file->Path->Data());
wcout << m_fullPath << endl; // prints the correct path of the selected file
m_loadedImage = false;
}
m_choseImage = true; // Checking in another code if the user chose an image to load.
});
}
Und dann, ich rufe die Funktion, die Textur zu laden ...
bool Texture::LoadFile(wchar_t* path, GameWindow^ gameWindow)
{
m_gameWindow = gameWindow;
ComPtr<ID3D11Resource> resource = nullptr;
if (!FH::ThrowIfFailed(CreateDDSTextureFromFile(m_gameWindow->dev.Get(), L"texture.dds", resource.GetAddressOf(), m_texture.ReleaseAndGetAddressOf()))) return false; // Works
if (!FH::ThrowIfFailed(CreateDDSTextureFromFile(m_gameWindow->dev.Get(), L"texture\\texture.dds", resource.GetAddressOf(), m_texture.ReleaseAndGetAddressOf()))) return false; // Works
if (!FH::ThrowIfFailed(CreateDDSTextureFromFile(m_gameWindow->dev.Get(), L"..\\texture.dds", resource.GetAddressOf(), m_texture.ReleaseAndGetAddressOf()))) return false; // E_ACCESSDENIED
if (!FH::ThrowIfFailed(CreateDDSTextureFromFile(m_gameWindow->dev.Get(), path, resource.GetAddressOf(), m_texture.ReleaseAndGetAddressOf()))) return false; // E_ACCESSDENIED
return true;
}
Nun, da ich keine Ahnung, warum haben, deshalb bin ich hierher gekommen, Ihre Hilfe zu bitten.
Vielen Dank!
Vielen Dank, ich war mir dessen nicht bewusst, und jetzt funktioniert es! – Drake