gpt4 book ai didi

winapi - 为什么 LoadResource/LockResource 有时会返回串联的资源数据?

转载 作者:行者123 更新时间:2023-12-01 09:08:59 25 4
gpt4 key购买 nike

我正在处理一个包含大量 HTML 资源的 Visual Studio C++ 项目。它们由如下所示的方法加载:

LPCTSTR loadHTML(HMODULE hModule, LPCTSTR sResourceName)
{
HRSRC hResource = FindResource(hModule, sResourceName, RT_HTML);
if(!hResource)
return 0;

HGLOBAL hResourceData = LoadResource(hModule, hResource);
if(!hResourceData)
return 0;

return reinterpret_cast<LPCTSTR>(LockResource(hResourceData));
}

大多数情况下,这工作正常。但是,有时它会返回与另一个资源连接的资源。当这种情况发生时,它是该构建中的一个持久性问题。我可以通过向相关资源添加几个空行然后重建项目来“修复”它。它会定期发生,即使资源没有改变。

我很想弄清楚为什么会发生这种情况。有其他人遇到过吗?我的资源是否有什么特别之处导致了问题?我的代码有错吗?

可悲的是,我不愿意在这里发布示例资源;它们很长,这是专有软件。

最佳答案

您的资源的特殊之处在于您希望它们为零终止。 iirc 资源部分在 16 字节边界上对齐,这意味着每当“blob”是 16 字节长的倍数时,资源和下一个资源之间不会有任何分隔字节。

确保使用终止零字符保存资源,或使用 SizeofResource以确定资源的结束位置。

关于winapi - 为什么 LoadResource/LockResource 有时会返回串联的资源数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3378011/

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