vc将资源文件写到磁盘

来源:互联网 发布:linux 文件传输命令 编辑:程序博客网 时间:2024/05/17 06:03

exe里的:

BOOL  Res2File(LPCTSTR lpName,LPCTSTR lpType,LPCTSTR filename)
{
HINSTANCE hInstance=GetModuleHandle(NULL);
if (NULL == hInstance)
{
MessageBox(NULL,L"hInstance is null",L"Hahaha......",MB_OK); 
}
HRSRC hRes = ::FindResource(hInstance,lpName,lpType);
if(hRes == NULL) MessageBox(NULL,L"hRes is null",L"Hahaha......",MB_OK); 
HGLOBAL gl = ::LoadResource(NULL,hRes);
if(gl == NULL)   MessageBox(NULL,L"gl is null",L"Hahaha......",MB_OK); 
LPVOID lp = ::LockResource(gl);
if(lp == NULL) MessageBox(NULL,L"lp is null",L"Hahaha......",MB_OK); 
HANDLE fp = ::CreateFile(filename,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
if(fp == INVALID_HANDLE_VALUE)
{
if(lp == NULL) MessageBox(NULL,L"fp is null",L"Hahaha......",MB_OK); 
return FALSE;
}


DWORD a;
if (!::WriteFile(fp,lp,SizeofResource(NULL,hRes),&a,NULL))
{
if(lp == NULL) MessageBox(NULL,L"w err",L"Hahaha......",MB_OK); 
return FALSE;
}


CloseHandle(fp);
FreeResource(gl);


return a;
}


调用示例: Res2File(MAKEINTRESOURCE(IDR_EXE1),L"EXE",L"./you.exe");



dll里的:

extern "C" BOOL _declspec(dllexport) Res2File(LPCTSTR filename);


extern HMODULE g_ThisModule;//在DllMain 函数里赋值  g_ThisModule = hModule;
/*extern "C"*/ BOOL /*_declspec(dllexport)*/ Res2File(LPCTSTR lpName,LPCTSTR lpType,LPCTSTR filename)
{
HINSTANCE hInstance=GetModuleHandle(NULL);
if (g_ThisModule == NULL||NULL == hInstance)
{
return FALSE;
}


HRSRC hRes = ::FindResource(g_ThisModule,lpName,lpType);
if(hRes == NULL)
{
return FALSE;
}
HGLOBAL gl = ::LoadResource(g_ThisModule,hRes);
if(gl == NULL)   
return FALSE;
LPVOID lp = ::LockResource(gl);
if(lp == NULL)
return FALSE;
HANDLE fp = ::CreateFile(filename,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
if(fp == INVALID_HANDLE_VALUE)
{
return FALSE;
}


DWORD a;
if (!::WriteFile(fp,lp,SizeofResource(g_ThisModule,hRes),&a,NULL))
{
return FALSE;
}

CloseHandle(fp);
FreeResource(gl);

return a;
}




extern "C" BOOL _declspec(dllexport) Res2File( LPCTSTR filename)
{
WCHAR * tt=MAKEINTRESOURCE(IDR_EXE1); 
return Res2File(tt,L"EXE",filename);
}

原创粉丝点击