如何将EXE文件作为自定义资源加入MFC dll中,并在该dll中使用该资源

时间:2021-08-20 20:49:38
现在做一个项目,需要调用一个外部EXE文件。我想把该EXE作为自定义资源添加到工程中,并在使用时将该资源导出为磁盘文件。现已将该EXE作为自定义资源添加到工程中,但是在调用FindResource时出现错误,具体提示为“指定的映像文件不包含资源区域”。求高手指点。

5 个解决方案

#2


可以自己根据PE格式来读取

FindResource前得LockResource.
或者是hModule有误?

#3


~_~
回复了才发现语句组织错误了
FindResouce只需要hMoudule正确就可以,其他2项可以空白。
但LockResource二进制资源必须用FindResource or FindResourceEx返回的handle,而不能直接是Resource在虚拟内存的地址

#4



HRSRC FindResource(HMODULE hModule, LPCTSTR lpName, LPCTSTR lpType);


第三个参数类型一定要传对的,否则找不到。类型是你添加EXE到资源的时候自己输入的,例如"EXE"
然后使用

HGLOBAL LoadResource(HMODULE hModule, HRSRC hResInfo);


加载资源,使用

DWORD SizeofResource(HMODULE hModule, HRSRC hResInfo);


来获取资源文件的长度,使用

LPVOID LockResource(HGLOBAL hResData);


来获取指向EXE文件数据的指针。
有了这个指针,有了EXE资源的长度,就可以去读到数据,并把这段数据保存到硬盘临时文件。
然后使用ShellExecute或者CreateProcess调用。

#5


我也在问这个问题

#1


#2


可以自己根据PE格式来读取

FindResource前得LockResource.
或者是hModule有误?

#3


~_~
回复了才发现语句组织错误了
FindResouce只需要hMoudule正确就可以,其他2项可以空白。
但LockResource二进制资源必须用FindResource or FindResourceEx返回的handle,而不能直接是Resource在虚拟内存的地址

#4



HRSRC FindResource(HMODULE hModule, LPCTSTR lpName, LPCTSTR lpType);


第三个参数类型一定要传对的,否则找不到。类型是你添加EXE到资源的时候自己输入的,例如"EXE"
然后使用

HGLOBAL LoadResource(HMODULE hModule, HRSRC hResInfo);


加载资源,使用

DWORD SizeofResource(HMODULE hModule, HRSRC hResInfo);


来获取资源文件的长度,使用

LPVOID LockResource(HGLOBAL hResData);


来获取指向EXE文件数据的指针。
有了这个指针,有了EXE资源的长度,就可以去读到数据,并把这段数据保存到硬盘临时文件。
然后使用ShellExecute或者CreateProcess调用。

#5


我也在问这个问题