Hur får du URL strängarna till filer, efter du har skapat din C++ applikation? Visual Studio 2022
När jag läser en fil i C++ med Visual Studio 2022 så skriver jag en URL sträng som innehåller länken till filen t.ex. "/mapp/filer/minFil.txt"
Men problemet är att när jag skapar min release-applikation, alltså mappen. Så hamnar alla mina .dll och .exe filer där, men ingen "minFil.txt" finns där.
Hur löser jag detta problem? Jag måste på något sätt få med mina övriga filer med i Release-applikationsmappen.
Hur skulle du ha gjort?
QT Creator hade en väldigt bra lösning på detta igenom att använda resource file. Men nu kör jag Visual Studio 2022. Det finns resource file där med också, men jag vet inte hur jag kan få en URL sträng som innehåller sökvägen till min fil i Visual Studio 2022.
Jag vet inte hur du menar. Jag kan inkludera mina bilder på en så kallad Resource.resx fil. Men mer än så har jag ingen aning. Hur kan jag få tag på en sökvägssträng till denna bild?
Jag har importerat en fil som heter pinmap.png och i min Resource.rc fil så heter den IDB_PNG1. Mej när jag läser in resource så är det bara en svart bild.
Men problemet är att när jag skapar min release-applikation, alltså mappen. Så hamnar alla mina .dll och .exe filer där, men ingen "minFil.txt" finns där.
Jag har hittat en lösning och det är att jag använder Resource.rc och inkluderar en bitmap. Men jag kan inte läsa denna bitmap.
Jag får bara en svart ruta.
Så här löste jag problemet. Där IDR_IMAGE1 är alltså ett nummer som länkar till min fil. Men problemet är att detta sätt att läsa in bilder, är inte direkt det mest korrekta sättet. Det blir inte så bra då RGB färgerna blir lite skeva.
// Locate the resource in the application's executable.
HRSRC imageResHandle = FindResource(
NULL, // This component.
MAKEINTRESOURCE(IDR_IMAGE1), // Resource name.
L"Image"); // Resource type.
HRESULT hr = (imageResHandle ? S_OK : E_FAIL);
// Load the resource to the HGLOBAL.
HGLOBAL imageResDataHandle = NULL;
if (SUCCEEDED(hr)) {
imageResDataHandle = LoadResource(NULL, imageResHandle);
hr = (imageResDataHandle ? S_OK : E_FAIL);
}
// Lock the resource to retrieve memory pointer.
LPVOID image_data = NULL;
if (SUCCEEDED(hr)) {
image_data = LockResource(imageResDataHandle);
UnlockResource(imageResDataHandle);
hr = (image_data ? S_OK : E_FAIL);
}