这是我的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!
答案 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”类型是标准名称。