示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// 提取资源文件
BOOL ExtraceResourceFile(uint16_t resource_id, const TCHAR* output_file, TCHAR* type)
{
HANDLE hFile = NULL;
HANDLE hFilemap = NULL;
BOOL bRet = FALSE;
do
{
HINSTANCE hInstance = ::GetModuleHandleW(nullptr);
HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(resource_id), type);
if (hResource == nullptr)
{
break;
}
HGLOBAL hFileResource = LoadResource(nullptr, hResource);
if (hFileResource == nullptr)
{
break;
}
LPVOID lpFile = LockResource(hFileResource);
if (lpFile == nullptr)
{
break;
}
uint32_t dwSize = SizeofResource(nullptr, hResource);
if (dwSize <= 0)
{
break;
}

hFile = CreateFile((LPCSTR)output_file, GENERIC_READ GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
break;
}
HANDLE hFilemap = CreateFileMapping(hFile, nullptr, PAGE_READWRITE, 0, dwSize, nullptr);
if (hFilemap == NULL)
{
break;
}
LPVOID lpBaseAddress = MapViewOfFile(hFilemap, FILE_MAP_WRITE, 0, 0, 0);
if (lpBaseAddress == NULL)
{
break;
}
CopyMemory(lpBaseAddress, lpFile, dwSize);
UnmapViewOfFile(lpBaseAddress);
bRet = TRUE;
} while (0);

if (hFilemap != NULL)
{
CloseHandle(hFilemap);
}
if (hFile != INVALID_HANDLE_VALUE && hFile != NULL)
{
CloseHandle(hFile);
}
return bRet;
}

使用方式:

1
2
// 写出资源文件
ExtraceResourceFile(IDR_AIR21, strAir2DllPath.GetString(), "AIR2");

资源如图所示存放:
kv24ffk4.png