16,472
社区成员
发帖
与我相关
我的任务
分享
//把DLL文件添加到EXE文件中去
BOOL CDisposionServer::AddRess(LPCTSTR FileName1, LPCTSTR FileName2, int rce)
{
HANDLE hFile;
DWORD dwFileSize,
dwBytesRead;
LPBYTE lpBuffer;
hFile = CreateFile(FileName1, GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (INVALID_HANDLE_VALUE != hFile)
{
dwFileSize = GetFileSize(hFile, NULL);
lpBuffer = new BYTE[dwFileSize];
if (ReadFile(hFile, lpBuffer, dwFileSize, &dwBytesRead, NULL) != FALSE)
{
HANDLE hResource;
hResource = BeginUpdateResource(FileName2, FALSE);
if (NULL != hResource)
{
if (UpdateResource(hResource,
RT_RCDATA,
MAKEINTRESOURCE(rce),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPVOID) lpBuffer,
dwFileSize) != FALSE)
{
EndUpdateResource(hResource, FALSE);
}
}
}
else
{
delete [] lpBuffer;
CloseHandle(hFile);
return 0;
}
}
delete [] lpBuffer;
CloseHandle(hFile);
return 1;
}
AddRess(tempDir,EXEFilePath,130)
BOOL ReadRes(char *path, int rce)
{
//得到自身路径
TCHAR exeFullPath[MAX_PATH]; // MAX_PATH在API中定义为 128
GetModuleFileName(NULL,exeFullPath,MAX_PATH);
HMODULE hLibrary;
HRSRC hResource;
HGLOBAL hResourceLoaded;
LPBYTE lpBuffer;
hLibrary = LoadLibrary(exeFullPath);
if (NULL != hLibrary)
{
hResource = FindResource(hLibrary, MAKEINTRESOURCE(rce), RT_RCDATA);
if (NULL != hResource)
{
hResourceLoaded = LoadResource(hLibrary, hResource);
if (NULL != hResourceLoaded)
{
lpBuffer = (LPBYTE) LockResource(hResourceLoaded);
if (NULL != lpBuffer)
{///////////////////////////////////
DWORD dwFileSize,
dwBytesWritten;
HANDLE hFile;
dwFileSize = SizeofResource(hLibrary, hResource);
hFile = CreateFile(path,
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (INVALID_HANDLE_VALUE != hFile)
{
WriteFile(hFile, lpBuffer, dwFileSize, &dwBytesWritten, NULL);
CloseHandle(hFile);
}/////////////////////////////////
}
}
}
else
{
FreeLibrary(hLibrary);
return 0;
}
}
FreeLibrary(hLibrary);
return 1;
}
ReadRes(tempDir, 130)///tempDir展开的文件文件位置,130是资源所在的位置