VC程序中如何加载一个NE格式的EXE中的资源?

0153 2004-10-18 10:42:21
我的程序需要加载一个NE格式的EXE中的资源,但使用LoadLibraryEx或GetModuleHandle等函数均不行,出错代码是不能打开非PE格式。
但是我看到有的软件能获取NE格式的EXE中的资源,当然VC自己也行。因此肯定有另外的方法,有谁知道,望不吝赐教。
...全文
87 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
0153 2004-10-20
  • 打赏
  • 举报
回复
解决方法就是按照二楼shxd(龙)提供的网址下载了NE格式的说明后自己处理。
0153 2004-10-20
  • 打赏
  • 举报
回复
以下是我从NE文件提取资源的代码,供大家参考
class cNEFile {
private:
LPBYTE lpData;
DWORD m_FileSize;
public:
cNEFile();
BOOL Init(LPCSTR);
void Exit();
LPVOID GetResource(UINT, LPSTR, DWORD &);
};
cNEFile::cNEFile()
{
ZeroMemory(this, sizeof(cNEFile));
}
BOOL cNEFile::Init(LPCSTR lpfilename)
{
HANDLE hf;
DWORD size;
hf=CreateFile(lpfilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hf==NULL) return FALSE;
m_FileSize=GetFileSize(hf, NULL);
lpData=(LPBYTE)malloc(m_FileSize);
if (lpData==NULL)
{
CloseHandle(hf);
return FALSE;
}
ReadFile(hf, lpData, m_FileSize, &size, NULL);
CloseHandle(hf);
return TRUE;
}
void cNEFile::Exit()
{
if (lpData)
{
free(lpData);
lpData=NULL;
}
}
LPVOID cNEFile::GetResource(UINT id, LPSTR type, DWORD &size)
{//其中id=资源的ID号(如IDI_MYICON),type=资源类型(如RT_BITMAP)
LPBYTE lpNE,lpRes,p,t;
WORD res_shift,type_id,res_num,i,res_id;
if (*(LPWORD)(lpData+0x18)<0x40) return(NULL);
lpNE=lpData+*(LPWORD)(lpData+0x3C);
if (*(LPWORD)lpNE!=0x454E) return(NULL);
lpRes=lpNE+*(LPWORD)(lpNE+0x24);
res_shift=*(LPWORD)lpRes;
for (p=lpRes+2;*(LPWORD)p;)
{
type_id=*(LPWORD)p;
res_num=*(LPWORD)(p+2);
p+=8;
if ((type_id&0x8000)&&(type_id&0x7FFF)==(WORD)type)
{
t=p;
for (i=0;i<res_num;i++)
{
res_id=*(LPWORD)(t+6);
if ((res_id&0x8000)&&(res_id&0x7FFF)==(WORD)id)
{
size=(DWORD)*(LPWORD)(t+2)<<res_shift;
return((LPVOID)(lpData+((DWORD)*(LPWORD)t<<res_shift)));
}
t+=12;
}
}
p+=res_num*12;
}
return(NULL);
}
DentistryDoctor 2004-10-19
  • 打赏
  • 举报
回复
NE?
shxd 2004-10-19
  • 打赏
  • 举报
回复
怎么到处看到楼主发同样的贴?

下面是各种文件格式的描述,应该对楼主有用,楼主看看 :-)
http://www.wotsit.org/search.asp?s=windows
Visual_Li 2004-10-19
  • 打赏
  • 举报
回复
第一次听说NE
赶紧溜进来看看,但是好像。。。。。。没有答案啊
DentistryDoctor 2004-10-19
  • 打赏
  • 举报
回复
Try to read this article:
http://www.codeguru.com/Cpp/W-P/dll/article.php/c3653/
pepsi1980 2004-10-19
  • 打赏
  • 举报
回复
mark
oyljerry 2004-10-19
  • 打赏
  • 举报
回复
New Exe文件格式
roger_ding 2004-10-18
  • 打赏
  • 举报
回复
根据NE格式自己去找吧,不是很复杂的

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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