2011-03-21 75 views
4

如果我在EXE中有一个资源,并且我想提取它,它非常简单。例如:如何从BPL内提取资源?

stream := TResourceStream.Create(HInstance, ResourceName, RT_RCDATA); 

这是有效的,因为全局变量HInstance是EXE句柄。 BPL中的代码是否有类似的方式来获取它所包含的包的句柄,以便我可以从中提取资源?

回答

7

HInstance实际上是在SysInit单元中,每个PE(包,exe,dll)都是唯一的。系统中,如果使用rtl包,大部分编译器RTL和辅助函数都会在包中共享。

因此,您在上面显示的代码应该可以在一个包内正常工作。 MainInstance可能是你认为是加载exe文件(甚至在某些情况下是DLL)的句柄。

+0

是的,SysInit.HInstance是执行代码所在模块的实例。 – 2011-03-21 07:39:57

+0

那么,理论上这是非常好的,但它不工作。我在BPL中有一个单元,并且有这样一行,并且引发了一个未找到的错误。我已经使用ResourceHacker以正确的名称验证资源是否存在。任何想法发生了什么? – 2011-03-21 14:41:02

+0

刚刚进行了测试,并且BPL内部单元的“HInstance”值与托管BPL的EXE中的单元返回的值相同。 – 2011-03-21 15:29:13