5 个解决方案
#2
可以自己根据PE格式来读取
FindResource前得LockResource.
或者是hModule有误?
FindResource前得LockResource.
或者是hModule有误?
#3
~_~
回复了才发现语句组织错误了
FindResouce只需要hMoudule正确就可以,其他2项可以空白。
但LockResource二进制资源必须用FindResource or FindResourceEx返回的handle,而不能直接是Resource在虚拟内存的地址
回复了才发现语句组织错误了
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有误?
FindResource前得LockResource.
或者是hModule有误?
#3
~_~
回复了才发现语句组织错误了
FindResouce只需要hMoudule正确就可以,其他2项可以空白。
但LockResource二进制资源必须用FindResource or FindResourceEx返回的handle,而不能直接是Resource在虚拟内存的地址
回复了才发现语句组织错误了
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
我也在问这个问题