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>classBinRes  {public:    BinRes();    virtual~BinRes();public:    staticvoidExtractBinResource( std::string strCustomResName, intnResourceId, std::string strOutputName);private:    staticstd::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_FILEstaticcharTHIS_FILE[]=__FILE__;#define new DEBUG_NEW#endifBinRes::BinRes(){}BinRes::~BinRes(){}voidBinRes::ExtractBinResource( std::string strCustomResName, intnResourceId, std::string strOutputName ){    HGLOBALhResourceLoaded;        // handle to loaded resource     HRSRChRes;                     // handle/ptr. to res. info.     char*lpResLock;                // pointer to resource data     DWORDdwSizeRes;    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((constchar*)lpResLock, dwSizeRes);    outputFile.close();}// retrieves the full path and file name for our executable file std::string BinRes::getAppLocation(){    TCHARszPathName[128];    std::string strPath;    GetModuleFileName(NULL, szPathName, 128);    strPath = szPathName;        intslashPos = strPath.rfind(‘\\‘);    if(slashPos == strPath.npos)        throw"Unable to get exe location";    strPath = strPath.substr(0, slashPos);        returnstrPath;} | 
关键操作步骤:
在资源视图-》右键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