C++如何调用或使用资源文件
我在C++里创建了一个资源文件“ziy.rc”,里面的TEMP类的IDR_TEMP2资源,怎么在代码里使用这个资源?比如在控制台输出这个资源、写文件写出这个资源等等以下是...
我在C++里创建了一个资源文件“ziy.rc”,里面的TEMP类的IDR_TEMP2资源,怎么在代码里使用这个资源?比如在控制台输出这个资源、写文件写出这个资源等等
以下是资源视图: 展开
以下是资源视图: 展开
4个回答
展开全部
1.把exe文件添加进资源文件。
2.读取这个资源并输出。
3.验证exe文件是否输出成功。
………………
主要就是第二步难。我按照此处的做法需要添加以下头文件:winbase.h,afx.h,afxdlgs.h方可编译成功,但是运行时连接不成功。
以下函数可以实现从资源文件中读出文件并写到指定的文件, MyType 资源类型 ITEMID 资源ID
至于路径可以用GetTempPath获取临时文件夹
BOOL UseCustomResource()
{
//定位我们的自定义资源,这里因为我们是从本模块定位资源,所以将句柄简单地置为NULL即可
HRSRC hRsrc = Findresource(null, MAKEINTRESOURCE(ITEMID), TEXT("MyType"));
if (NULL == hRsrc)
return FALSE;
//获取资源的大小
DWORD dwSize = SizeofResource(NULL, hRsrc);
if (0 == dwSize)
return FALSE;
//加载资源
HGLOBAL hGlobal = LoadResource(NULL, hRsrc);
if (NULL == hGlobal)
return FALSE;
//锁定资源
LPVOID pBuffer = LockResource(hGlobal);
if (NULL == pBuffer)
return FALSE;
//我们用刚才得到的pBuffer和dwSize来做一些需要的事情。可以直接在内存中使
//用,也可以写入到硬盘文件。这里我们简单的写入到硬盘文件,如果我们的自定
//义资源是作为嵌入DLL来应用,情况可能要复杂一些。
BOOL bRt = FALSE;
FILE* fp = _tfopen(_T("demo.exe"), _T("wb"));
if (fp != NULL)
{
if (dwSize == fwrite(pBuffer, sizeof(char), dwSize, fp))
bRt = TRUE;
fclose(fp);
}
//FreeResource(hGlobal);
return bRt;
}
2.读取这个资源并输出。
3.验证exe文件是否输出成功。
………………
主要就是第二步难。我按照此处的做法需要添加以下头文件:winbase.h,afx.h,afxdlgs.h方可编译成功,但是运行时连接不成功。
以下函数可以实现从资源文件中读出文件并写到指定的文件, MyType 资源类型 ITEMID 资源ID
至于路径可以用GetTempPath获取临时文件夹
BOOL UseCustomResource()
{
//定位我们的自定义资源,这里因为我们是从本模块定位资源,所以将句柄简单地置为NULL即可
HRSRC hRsrc = Findresource(null, MAKEINTRESOURCE(ITEMID), TEXT("MyType"));
if (NULL == hRsrc)
return FALSE;
//获取资源的大小
DWORD dwSize = SizeofResource(NULL, hRsrc);
if (0 == dwSize)
return FALSE;
//加载资源
HGLOBAL hGlobal = LoadResource(NULL, hRsrc);
if (NULL == hGlobal)
return FALSE;
//锁定资源
LPVOID pBuffer = LockResource(hGlobal);
if (NULL == pBuffer)
return FALSE;
//我们用刚才得到的pBuffer和dwSize来做一些需要的事情。可以直接在内存中使
//用,也可以写入到硬盘文件。这里我们简单的写入到硬盘文件,如果我们的自定
//义资源是作为嵌入DLL来应用,情况可能要复杂一些。
BOOL bRt = FALSE;
FILE* fp = _tfopen(_T("demo.exe"), _T("wb"));
if (fp != NULL)
{
if (dwSize == fwrite(pBuffer, sizeof(char), dwSize, fp))
bRt = TRUE;
fclose(fp);
}
//FreeResource(hGlobal);
return bRt;
}
展开全部
首先加载资源:
HMODULE hExe = GetModuleHandle(0);
HRSRC hRes = FindReousrce(hExe , MAKEINTRESOURCE(IDR_TEMP2), TEXT("TEMP"));
HGLOBAL hgRes = LoadResource(hExe, hRes);
然后拿到指向资源数据的指针和资源数据的大小
DWORD nResSize = SizeOfResource(hExe, hRes);
LPVOID pRes = LockResource(hgRes);
HMODULE hExe = GetModuleHandle(0);
HRSRC hRes = FindReousrce(hExe , MAKEINTRESOURCE(IDR_TEMP2), TEXT("TEMP"));
HGLOBAL hgRes = LoadResource(hExe, hRes);
然后拿到指向资源数据的指针和资源数据的大小
DWORD nResSize = SizeOfResource(hExe, hRes);
LPVOID pRes = LockResource(hgRes);
更多追问追答
追问
这些代码需要什么头文件吗?还有,【 FindReousrce】应该是【FindResource】~
追答
windows.h
手残打错了(……
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
.rc是窗口程序所用的资源,比如菜单,图标,位图,工具栏,字符串等资源都包含在这.rc的文件里面
更多追问追答
追问
是啊,怎么调用此文件?
追答
学过 windows编程 或者其类库 MFC吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
LoadResource
追问
能详细点吗?我知道你是大牛...一般大牛的回答都是最简洁的,可是你叫我们这些新手情何以堪啊= =
追答
字符串一般使用 LoadString
如果有image 可能使用到 LoadFromResource
不懂就搜索这两个函数的用法!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询