gpt4 book ai didi

C++:从dll访问嵌入式资源

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:50 26 4
gpt4 key购买 nike

我有一个 c++ dll 项目,其中,我通过“resource.rc”文件嵌入了一些原始数据。

IDR_TEMPLATE1           RCDATA                "areaTemplate.bin"

现在我想从 dll 访问“areaTemplate.bin”文件的数据。如何读取字节数组中“areaTemplate.bin”的内容?

最佳答案

正如 Manuell 所说,您使用 FindResource() , LoadResource()可能是LockResource()SizeofResource()

我碰巧有一些代码可以提取资源并将其写入文件,这可能有助于您理解相关 API。

void WriteResourceToFile(
HANDLE hFile,
const _tstring &resourceName,
const _tstring &resourceType,
HMODULE hModule)
{
HRSRC hResource = ::FindResource(
hModule,
resourceName.c_str(),
resourceType.c_str());

if (!hResource)
{
const DWORD lastError = ::GetLastError();

throw CWin32Exception(
_T("WriteResourceToFile() - FindResource"),
lastError);
}

HGLOBAL hGlobal = ::LoadResource(hModule, hResource);

if (!hGlobal)
{
const DWORD lastError = ::GetLastError();

throw CWin32Exception(
_T("WriteResourceToFile() - LoadResource"),
lastError);
}

void *pData = ::LockResource(hGlobal);

if (!pData)
{
const DWORD lastError = ::GetLastError();

throw CWin32Exception(
_T("WriteResourceToFile() - LockResource"),
lastError);
}

const DWORD bytes = ::SizeofResource(hModule, hResource);

DWORD bytesWritten = 0;

if (!::WriteFile(hFile, pData, bytes, &bytesWritten, 0))
{
const DWORD lastError = ::GetLastError();

throw CWin32Exception(
_T("WriteResourceToFile() - WriteFile"),
lastError);
}

if (bytesWritten != bytes)
{
throw CWin32Exception(
_T("WriteResourceToFile() - WriteFile"),
_T("Wrote less bytes (") + ToString(bytesWritten) +
_T("( than expected: ") + ToString(bytes));
}
}

关于C++:从dll访问嵌入式资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19952206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com