在一个程序中加载另一程序使用GlobalFree()函数出错的原因

首先是添加资源

在资源类型中填写自己定义的类型

这是我自己导入的一个程序

导入之后开始编写代码,代码如下(可以添加一个消息响应函数生成该导入的程序)

 1 HRSRC hRes;
 2     hRes=FindResource(NULL,MAKEINTRESOURCE(IDR_EXE2),"EXE");   //找插入的资源
 3     HGLOBAL hgRes;
 4     hgRes=LoadResource(NULL,hRes);
 5     void *pRes=LockResource(hgRes);
 6     DWORD size;
 7     size=SizeofResource(NULL,hRes);
 8     char *hmem;
 9     hmem=(char*)malloc(size+1);   //分配内存块
10     if(hmem==NULL)
11     {
12         AfxMessageBox("分配内存失败!");
13             return ;
14     }
15     WriteProcessMemory(GetCurrentProcess(),(void*)hmem,pRes,size,NULL);  //写入内存块中
16     HANDLE FilePath;
17     //创建文件的路径属性等
18     FilePath=CreateFile("C:\Users\kjinziguiteer\Desktop\尽子轨.exe",GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
19 
20     DWORD nWrite;
21     WriteFile(FilePath,(void*)hmem,size,&nWrite,NULL);
22     CloseHandle(FilePath);
23     //GlobalFree(hgRes);
24     MessageBox(NULL,"生成程序成功",NULL);
25     CDialog::OnOK();
26     

在这代码中有个错误,就是

1 HGLOBAL hgRes;
2 hgRes=LoadResource(NULL,hRes);
3 //GlobalFree(hgRes);//这行代码中是不需要释放资源句柄的,因为调用 //了该函数,之前不知道程序一直崩溃,甚是忧伤

这就可以解决了。拔凉拔凉的。

原文地址:https://www.cnblogs.com/newworldcom/p/3459961.html