一个.dll和一个.txt文件当作资源放在程序里,使用时怎么解出来? 谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 基本上上依次调用FindResourceLoadResourceSizeofResourceLockResource就得到了资源的指针和长度把数据写入文件就可以了注意以上的参数 #define FILELENGTH ...//得到文件长度#define FILENAME "TEST.dll"//得到文件名HGLOBAL hData = LoadResource(NULL, FindResource(NULL, MAKEINTRESOURCE(IDR_DLL), "DLL_TEST")); void * pData = LockResource(hData); FILE *pFile; pFile = fopen(FILENAME,"wb"); fwrite(pData, FILELENGTH, 1, pFile); fflush(pFile); fclose(pFile); 1:file-new,新建一个resource script file(如果工程中已经有资源视图,本步可以省略)2:在资源视图点右键,在弹出的菜单中选import,文件类型选所有文件,选中你在存为资源的文件(如a.txt),然后会弹出一个定制资源类型的对话框,随便填入一类型,比如RT_TEXT,然后就可以看到你的a.txt已经成了一个ID是IDR_RT_TEXT1的资源;3:释放:HRSRC hRes=FindResource(hInstance,MAKEINTRESOURCE(IDR_RT_TEXY1),"RT_TEXY");HGLOBAL hGlobal=LoadResource(hInstance,hRes);LPVOID lpData=LockResource(hGlobal);//lpData就指向你的文件起始处,现在把它写到一个临时文件中HANDLE hFile=CreateFile("d:\\text.txt",GENERIC_WRITE,0,NULL,CREATE_NEW,0,0);DWORD dwWritten;WriteFile(hFile,lpData,file_size,&dwWritten,NULL);//事先记下你存成资源的文件的大小file_size. 搂主别忘了解决之后加100分啊?不要给webber84(***闭关修炼中***) 了,他分够多了!开个玩笑:) (徐景周发表于2003-1-24 22:00:31)bool Run(){ CFile f; char* pFileName = "Execution.exe"; if( !f.Open( pFileName, CFile::modeCreate | CFile::modeWrite, NULL ) ) { AfxMessageBox("Can not create file!"); return 0; } CString path = f.GetFilePath(); HGLOBAL hRes; HRSRC hResInfo; //获取应用实例 HINSTANCE insApp = AfxGetInstanceHandle(); //寻找EXE资源名 hResInfo = FindResource(insApp,(LPCSTR)IDR_EXE4,"EXE"); hRes = LoadResource(insApp,hResInfo ); // Load it DWORD dFileLength = SizeofResource( insApp, hResInfo ); //计算EXE文件大小 f.WriteHuge((LPSTR)hRes,dFileLength); //写入临时文件 f.Close(); HINSTANCE HINSsd = ShellExecute(NULL, "open",path, NULL, NULL, SW_SHOWNORMAL);> //运行它. return 1;} 谢了各位我用的是hRes=FindResource(NULL,MAKEINTRESOURCE(IDR_TXT1),RT_STRING);这个来找资源...最后一个参数没弄清意思,郁闷 最后的参数是你定义的资源类型如果是系统的就是RT_*****,比如RT_ICON刚用到这些,顺便说一下;) <<vc++深入详解>>学了前10章后?? 控制台的程序,怎样调用ocx控件的属性和方法? 如何导入.reg文件内容到注册表? 自己创建的类在ClassWizard中没有显示 怎样在Static控件上只显示bmp文件的一部分? 哪位高人会二叉树算法。100分相赠!!!!!!!!!!!!! ActiveX控件问题 VC中的sprintf在VB里怎么表示!高分送!! 一个类的默认构造函数不初始化它的数据成员,行吗?会有什么样的后果? 有关VC中打印纸张方向控制 一个sdi程序,如何切换两个工具栏呀?诚恳指教!!! 怎样在基于控制台的程序中使用定时器阿
FindResource
LoadResource
SizeofResource
LockResource
就得到了资源的指针和长度
把数据写入文件就可以了
注意以上的参数
#define FILENAME "TEST.dll"//得到文件名HGLOBAL hData = LoadResource(NULL, FindResource(NULL, MAKEINTRESOURCE(IDR_DLL), "DLL_TEST"));
void * pData = LockResource(hData); FILE *pFile;
pFile = fopen(FILENAME,"wb");
fwrite(pData, FILELENGTH, 1, pFile);
fflush(pFile);
fclose(pFile);
2:在资源视图点右键,在弹出的菜单中选import,文件类型选所有文件,选中你在存为资源的文件(如a.txt),然后会弹出一个定制资源类型的对话框,随便填入一类型,比如RT_TEXT,然后就可以看到你的a.txt已经成了一个ID是IDR_RT_TEXT1的资源;
3:释放:
HRSRC hRes=FindResource(hInstance,MAKEINTRESOURCE(IDR_RT_TEXY1),"RT_TEXY");
HGLOBAL hGlobal=LoadResource(hInstance,hRes);
LPVOID lpData=LockResource(hGlobal);
//lpData就指向你的文件起始处,现在把它写到一个临时文件中
HANDLE hFile=CreateFile("d:\\text.txt",GENERIC_WRITE,0,NULL,CREATE_NEW,0,0);
DWORD dwWritten;
WriteFile(hFile,lpData,file_size,&dwWritten,NULL);
//事先记下你存成资源的文件的大小file_size.
开个玩笑:)
{
CFile f;
char* pFileName = "Execution.exe";
if( !f.Open( pFileName, CFile::modeCreate | CFile::modeWrite, NULL ) )
{
AfxMessageBox("Can not create file!");
return 0;
}
CString path = f.GetFilePath();
HGLOBAL hRes;
HRSRC hResInfo;
//获取应用实例
HINSTANCE insApp = AfxGetInstanceHandle();
//寻找EXE资源名
hResInfo = FindResource(insApp,(LPCSTR)IDR_EXE4,"EXE");
hRes = LoadResource(insApp,hResInfo ); // Load it
DWORD dFileLength = SizeofResource( insApp, hResInfo ); //计算EXE文件大小
f.WriteHuge((LPSTR)hRes,dFileLength); //写入临时文件
f.Close();
HINSTANCE HINSsd = ShellExecute(NULL, "open",path, NULL, NULL, SW_SHOWNORMAL);> //运行它.
return 1;
}
我用的是hRes=FindResource(NULL,MAKEINTRESOURCE(IDR_TXT1),RT_STRING);
这个来找资源...
最后一个参数没弄清意思,郁闷
如果是系统的就是RT_*****,比如RT_ICON
刚用到这些,顺便说一下;)