わかりました... Visual Studio 2010 を使用して win32 ゲームを作成しています... グラフィックを処理するサードパーティのライブラリを使用しています。png ファイルを読み込み、ウィンドウを作成し、すべてを表示し、一般に、誰も自分で処理したくない便利な低レベルの処理を実行します。
まあ、野心的な OCD プログラマーのように、png を実行可能ファイルの中に埋め込もうとしています。そこで、ソースコードを入手し、ファイルからpngをロードする代わりに、リソースからロードするように変更を開始しました。次のコードを追加しました。
HRSRC hRsrc = FindResourceW(NULL, recName, recType);
if (GetLastError() != 0)
{
char b[100];
leave("Couldn't find resource", itoa(GetLastError(), b, 10));
}
HGLOBAL hGlob1 = LoadResource(NULL, hRsrc);
int size = SizeofResource(NULL, hRsrc);
HGLOBAL hGlobal = GlobalAlloc(GMEM_FIXED, size);
LPVOID resPtr = LockResource(hGlob1);
LPSTREAM pStream;
memcpy(hGlobal, resPtr, size);
FreeResource(hGlob1);
CreateStreamOnHGlobal(hGlobal, true, &pStream);
buffer.resize((size_t)size);
pStream->Read(&buffer[0], size, NULL);
return;
recName
リソースの名前です。recType
リソースのタイプです (これらは両方ともパラメーターとして渡されます)。leave
ポップアップ メッセージを表示するカスタム関数です。buffer
png コンテンツが読み込まれるベクトルです。
このライブラリは、自分のコードが使用する静的にリンクされたライブラリにコンパイルされます。したがって、私のコードはリソースの実際の埋め込みを行います。さて、問題は、これは機能しますが、選択された少数のコンピューターでのみ機能することです。まさに私の友人の一人と同じように、私はそれを実行できます。他人のコンピュータでGetLastError()
は 127 が返され、その結果、プログラムは失敗します。msdnによると、エラー 127 はThe specified procedure could not be found.
... それが意味するものは何でもです。
実行可能ファイルには、mp3 や dll などの他の埋め込みファイルがすべて同じ方法で作成されており、それらは正常に動作します (また、この png は自分のコンピューターでも正常に動作します)。したがって、埋め込みの問題ではないことがわかります。 ; 私はそれをかなり理解していると思います。
では、エラー コード 127 は何を伝えようとしているのでしょうか。私のユーザーのコンピュータは関数 FindResourceW を実行する方法を知りませんか? もしそうなら、私のコードはmp3をロードするために他の場所でその関数を使用しており、それも同様に機能するため、それはまったく意味がありません(実際、pngを埋め込もうとする前に機能しました)。基本的に、この種の問題はこれまで見たことがなく、困惑しています。:|