如果我有一个嵌入在EXE中的资源,想要提取它,那么这很简单。可以使用以下代码: stream := TResourceStream.Create(HInstance, ResourceName, RT_RCDATA); 这个方法有效是因为全局变量HInstance是EXE的句柄。在BPL内部,是否有类似的方式可以获取其所属的包的句柄,以便从中提取资源?
HInstance实际上在SysInit单元中,对于每个PE(包、exe、dll)是唯一的。如果使用rtl包,则编译器RTL和辅助函数的主要部分System是共享的。 因此,您上面显示的代码应该可以在包内正常工作。MainInstance可能是您认为是指向加载exe(甚至在某些情况下是DLL)的句柄的东西。
HInstance
值与托管 BPL 的 EXE 中的单元返回的值完全相同。 - Mason WheelerSysInit.HInstance
返回相同的值。令人奇怪的是,FindHInstance(@ThisProc)
和FindClassHInstance(TFormInThisBPL)
也是如此。 - Mason Wheeler