。。。从资源文件写到硬盘的问题

xengine-qyt 2009-10-02 04:47:58
BOOL ReleaseRes(CString strFileName,WORD wResID,CString strFileType)
{
// 资源大小
DWORD dwWrite=0;

// 创建文件
HANDLE hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if ( hFile == INVALID_HANDLE_VALUE )
{
return FALSE;
}

// 查找资源文件中、加载资源到内存、得到资源大小
HRSRC hrsc = FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType);
HGLOBAL hG = LoadResource(NULL, hrsc);
DWORD dwSize = SizeofResource( NULL, hrsc);

// 写入文件
WriteFile(hFile,hG,dwSize,&dwWrite,NULL);
CloseHandle( hFile );
return TRUE;
}

ReleaseRes(_T("Lib.Api"),(WORD)IDR_API1,_T("Api"));//为啥写出来的是0字节的文件呢?
...全文
67 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xengine-qyt 2009-10-02
  • 打赏
  • 举报
回复
不会我晕 找不到问题了!
MoXiaoRab 2009-10-02
  • 打赏
  • 举报
回复
strFileType的值是多少?hFile是否取到?

确认资源每一个句柄是否都取到了hResInfo,hgRes这些
xengine-qyt 2009-10-02
  • 打赏
  • 举报
回复
还是空文件啊。 搞不懂!

void ReleaseRes(LPCSTR strFileName,WORD wResID,WORD strFileType);
extern "C" _declspec(dllexport) void __stdcall ReleaseMoudelLibApi()
{
ReleaseRes("eApi.Api",IDR_EAPI1,IDR_EAPI1);
}
void ReleaseRes(LPCSTR strFileName,WORD wResID,WORD strFileType)
{
////////
HINSTANCE hInstance=GetModuleHandle(NULL);

HRSRC hResInfo = FindResource(hInstance,MAKEINTRESOURCE(wResID),
MAKEINTRESOURCE(strFileType));
HGLOBAL hgRes = LoadResource(hInstance, hResInfo);
void *pvRes = LockResource(hgRes);
DWORD cbRes = SizeofResource(hInstance, hResInfo);


HANDLE hFile = CreateFileA(strFileName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, 0);
DWORD cbWritten;
WriteFile(hFile, pvRes, cbRes, &cbWritten, 0);
CloseHandle(hFile);
}
xengine-qyt 2009-10-02
  • 打赏
  • 举报
回复
是啊
MoXiaoRab 2009-10-02
  • 打赏
  • 举报
回复
你没好好看我1#的代码,管你什么类型的资源,FindResource的第三个参数写MAKEINTRESOURCE(资源ID)
MoXiaoRab 2009-10-02
  • 打赏
  • 举报
回复
皮肤文件?二进制的吗
xengine-qyt 2009-10-02
  • 打赏
  • 举报
回复
FindResource 这个的第三个参数是 指定一个资源类型,我想设置的资源类型和MSDN上的比对没有 是一个皮肤文件 我应该如何设置呢?
MoXiaoRab 2009-10-02
  • 打赏
  • 举报
回复
你代码写错了


HINSTANCE hInstance=GetModuleHandle(NULL);

HRSRC hResInfo = FindResource(hInstance, MAKEINTRESOURCE(ID_MAGICDEL_DLL),
MAKEINTRESOURCE(RC_BINARYTYPE));
HGLOBAL hgRes = LoadResource(hInstance, hResInfo);
void *pvRes = LockResource(hgRes);
DWORD cbRes = SizeofResource(hInstance, hResInfo);


HANDLE hFile = CreateFile(filename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, 0);
DWORD cbWritten;
WriteFile(hFile, pvRes, cbRes, &cbWritten, 0);
CloseHandle(hFile);

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧