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/ 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)終わったら電話することを忘れないでください。

于 2012-08-08T13:19:44.453 に答える
0

問題は部分的に解決されました。実際、「シェーダー」ではなく「rcdata」タイプのリソースに問題がありました。例として2番目を挙げましたが、チェックしていませんでした(時間を無駄にしてしまい、本当に申し訳ありません)。「rcdata」以外のすべての型名が機能するようです。しかし、なぜ...?

編集: 問題は完全に解決されました。タイプ名として RT_RCDATA を使用するだけです。「rcdata」タイプが標準的な名前のようです。

于 2012-08-09T07:26:05.170 に答える