BinRes.h
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
#ifndef _waxie_binary_resource_h_#define _waxie_binary_resource_h_#include <string>class
BinRes {public: BinRes(); virtual
~BinRes();public: static
void ExtractBinResource( std::string strCustomResName, int
nResourceId, std::string strOutputName);private: static
std::string getAppLocation();};#endif |
BinRes.cpp
|
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 |
#include "stdafx.h"#include "testHarness.h"#include "BinRes.h"#include <string>#include <fstream>#include <iostream>#ifdef _DEBUG#undef THIS_FILEstatic
char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endifBinRes::BinRes(){}BinRes::~BinRes(){}void
BinRes::ExtractBinResource( std::string strCustomResName, int
nResourceId, std::string strOutputName ){ HGLOBAL
hResourceLoaded; // handle to loaded resource HRSRC
hRes; // handle/ptr. to res. info. char
*lpResLock; // pointer to resource data DWORD
dwSizeRes; std::string strOutputLocation; std::string strAppLocation; // lets get the app location strAppLocation = getAppLocation(); strOutputLocation = strAppLocation += "\\"; strOutputLocation += strOutputName; // find location of the resource and get handle to it hRes = FindResource( NULL, MAKEINTRESOURCE(nResourceId), strCustomResName.c_str() ); // loads the specified resource into global memory. hResourceLoaded = LoadResource( NULL, hRes ); // get a pointer to the loaded resource! lpResLock = (char*)LockResource( hResourceLoaded ); // determine the size of the resource, so we know how much to write out to file! dwSizeRes = SizeofResource( NULL, hRes ); std::ofstream outputFile(strOutputLocation.c_str(), std::ios::binary); outputFile.write((const
char*)lpResLock, dwSizeRes); outputFile.close();}// retrieves the full path and file name for our executable file std::string BinRes::getAppLocation(){ TCHAR
szPathName[128]; std::string strPath; GetModuleFileName(NULL, szPathName, 128); strPath = szPathName; int
slashPos = strPath.rfind(‘\\‘); if(slashPos == strPath.npos) throw
"Unable to get exe location"; strPath = strPath.substr(0, slashPos); return
strPath;} |
关键操作步骤:
在资源视图-》右键import-》文件类型选择所有类型-》找到对应的dll文件,编译,dll就在exe中了。
在保存的时候,提示资源类型,就写个BIN就可以(其实随意写就好),但是这个名称在释放的时候有用啊。
释放dll的方法是:
BinRes::ExtractBinResource( "BIN", 132, "debugViewer123.exe" )
注释:
1> "BIN" 就是import保存的 时候写的资源类型。
2> 132 是资源ID。
3> "debugViewer123.exe" 是导出的dll文件名称。
exe中嵌入dll和exe中释放dll,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/tiancun/p/3749997.html