カスタム バイナリ データを Windows 実行可能ファイルに埋め込む際に問題があります。問題は、リソースのリンクまたは取得にもある可能性がありますが、わかりません。とにかく、FindResource は NULL を返し、エラー コードは 1814です。
私が見つけたすべての例には、リソースを作成し、実行可能ファイルをビルド/作成するために、何らかの IDE を使用することが含まれています。makefileでnmakeを呼び出して、自動的に実行する必要があります。
デフォルトのディレクトリにインストールされているMS Visual Studio / C++の個人版を使用して、64ビットWindows 7で実行しています。
これが私がまとめたセットアップです(同じディレクトリ内のすべてのファイル。nmakeもこのディレクトリから呼び出されます):
ファイル:次の内容のcustom.data.txt :
My own personal custom data.
この例では、テキスト リソースのみを使用していることに注意してください。実際には、特定の形式のカスタム データを使用することはありません。
ファイル:次の内容のcustom.h :
#define IDR_RCDATA1 101
ファイル:次の内容のcustom.rc :
IDR_RCDATA1 RCDATA "custom.data.txt"
編集: #include "custom.h" がcustom.rcに追加されている場合、例は期待どおりに機能します。
#include "custom.h" IDR_RCDATA1 RCDATA "custom.data.txt"
ファイル:次の内容のexample.cpp :
#include "custom.h" #include <windows.h> #include <fstream> #include <iostream> using namespace std; int main(int argc, char* argv[]) { HRSRC myResource = FindResource(NULL, MAKEINTRESOURCE(IDR_RCDATA1), RT_RCDATA); if(myResource == NULL) { DWORD WINAPI errorCode = GetLastError(); cout << "Could not find resource! Error code: " << errorCode << "." << endl; return 0; } unsigned int myResourceSize = SizeofResource(NULL, myResource); cout << "Resource size: " << myResourceSize << endl; if(myResourceSize > 0) { HGLOBAL myResourceData = LoadResource(NULL, myResource); void* pMyBinaryData = LockResource(myResourceData); std::ofstream f("C:\\Users\\draver\\win_custom_resource\\extracted_resource.txt", std::ios::out | std::ios::binary); f.write((char*)pMyBinaryData, myResourceSize); f.close(); BOOL bResult = UnlockResource(myResource); bResult = FreeResource(myResource); } return 0; }
次の内容のmakefileをファイルします。
NAME = example CC = "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cl.exe" RC = "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\RC.exe" RESOURCE_NAME = custom all : link link : compile $(CC) $(NAME).obj $(RESOURCE_NAME).res compile : resource $(CC) -c $(NAME).cpp /EHsc resource : $(RC) $(RESOURCE_NAME).rc clean : del *.obj del *.exe del *.res del extracted_resource.txt
nmake の前に呼び出しているファイルsetup.batの内容は次のとおりです。
call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
生成された実行可能ファイル (example.exe) には、「自分の個人的なカスタム データ」が含まれています。文字列 (ダンプによって検証) は期待どおりですが、実行時に取得に失敗します。
出力は
Could not find resource! Error code: 1814.
私は何を間違っていますか?
編集:問題を解決する上記の編集 (3. ファイル: custom.rc ) を参照してください。