Visual Studio 2022 C++中获取Resource.resx图片URL路径及部署疑问
Debug和Release构建时Resource.resx的包含情况
- 默认配置下,VS2022的C++项目中,
.resx资源文件会被编译嵌入到最终的二进制文件(.exe或.dll)中,Debug和Release构建都会包含资源,不会单独保留.resx源文件。 - 验证配置方式:右键
.resx文件 → 属性 → 常规,确保“项类型”为“资源”,“内容”属性设为“是”(或“嵌入的资源”,C++项目中默认会将资源编译进二进制的资源节)。若设为“不复制”,资源依然会嵌入二进制;若设为“始终复制”,会把.resx文件复制到输出目录,但这并非常规做法,资源应优先嵌入二进制。
Release版本中获取图片资源的访问方式
由于资源是嵌入到二进制文件内的,不存在独立的“URL路径”,需通过资源API读取,若场景需要文件路径,可将资源写入临时文件:
- Win32原生C++方案
使用Windows资源API提取图片数据,如需路径可写入临时目录:// IDB_MYIMAGE是你给图片设置的资源ID,RT_BITMAP为资源类型(根据图片格式调整) HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDB_MYIMAGE), RT_BITMAP); HGLOBAL hResData = LoadResource(NULL, hRes); LPVOID pResData = LockResource(hResData); DWORD resSize = SizeofResource(NULL, hRes); // 写入临时文件获取路径 TCHAR tempPath[MAX_PATH]; GetTempPath(MAX_PATH, tempPath); TCHAR tempFile[MAX_PATH]; GetTempFileName(tempPath, _T("Img"), 0, tempFile); HANDLE hFile = CreateFile(tempFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hFile, pResData, resSize, NULL, NULL); CloseHandle(hFile); // tempFile即为可使用的本地文件路径,可转成file://格式的URL - C++/CLI混合模式方案
若使用托管C++,可通过ResourceManager读取资源并保存为临时文件:System::Resources::ResourceManager^ rm = gcnew System::Resources::ResourceManager("YourProjectNamespace.Resource", System::Reflection::Assembly::GetExecutingAssembly()); System::Drawing::Bitmap^ img = safe_cast<System::Drawing::Bitmap^>(rm->GetObject("MyImageName")); System::String^ tempPath = System::IO::Path::GetTempFileName(); img->Save(tempPath, System::Drawing::Imaging::ImageFormat::Png); // tempPath即为可用的文件路径
内容的提问来源于stack exchange,提问作者euraad
相关产品推荐
相关产品推荐

