1

这是我的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!

4

2 回答 2

1

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

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)

于 2012-08-08T13:19:44.453 回答
0

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

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

于 2012-08-09T07:26:05.170 回答