Win32,资源文件,加载到内存中

时间:2012-08-08 13:10:54

标签: winapi

这是我的test.rc文件:

shader.hlsl shaders "HLSL\\shader.hlsl"

我知道它看起来不像通常的rc文件,但是当我使用这样的函数时。

D3DX11CompileFromResource(handle, L"shader.hlsl", NULL, NULL, NULL, "VS", "vs_4_0", 0, 0, NULL, &s, &err, &hr);

它完美无缺,但我想将此文件加载到内存中。请告诉我怎么做,因为我现在缺乏想法。我尝试过这样的事情。

HRSRC hSrc = FindResource(GetModuleHandle(0), L"shader.hlsl", L"shaders");

但没有成功。

编辑:

FindResource()返回NULL!

2 个答案:

答案 0 :(得分:1)

您走在正确的轨道上:您需要使用一系列FindResource / LoadResource / LockResource

HMODULE hModule = GetModuleHandle(NULL);
HRSRC hRes = FindResource(hModule, L"shader.hlsl", L"shaders"); 
HGLOBAL hMem = LoadResource(hModule, hRes);
LPVOID lpResource = LockResource(hMem);

DWORD size = SizeofResource(hModule, hRes);

lpResource是指向您资源的指针。 size是内存块的大小(以字节为单位)。当然,完成后不要忘记致电FreeResource(hMem)

答案 1 :(得分:0)

问题部分解决了。事实上,我遇到了“rcdata”类型的资源问题,而不是“着色器”。我把第二个作为一个例子,但没有检查它(我真的很抱歉,我浪费了你的时间)。似乎除了“rcdata”之外的每个类型名称都有效。但为什么......?

修改 问题完全解决了。我只需要使用RT_RCDATA作为类型名称。似乎“rcdata”类型是标准名称。