2011-03-21 3 views
4

EXE에 리소스가 있는데 압축을 풀고 싶다면 꽤 간단합니다. 예 :BPL 내에서 리소스를 추출하는 방법은 무엇입니까?

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

전역 변수 HInstance가 EXE의 핸들이기 때문에 작동합니다. BPL 내의 코드에서 패키지의 핸들을 얻는 것과 비슷한 방법이 있습니까? 그래서 리소스를 추출 할 수 있습니까?

답변

7

HInstance는 실제로 각 PE (package, exe, dll)마다 고유 한 SysInit 단위에 있습니다. rtl 패키지를 사용하는 경우 컴파일러 RTL 및 헬퍼 함수의 대량이있는 시스템이 패키지간에 공유됩니다.

위 코드는 패키지 내에서 올바르게 작동해야합니다. MainInstance는 아마도 로딩 exe (또는 경우에 따라 DLL)에 대한 핸들로 생각할 것입니다.

+0

예, SysInit.HInstance는 실행 코드가 상주하는 모듈의 인스턴스입니다. –

+0

글쎄, 이론적으로는 매우 좋지만 작동하지 않습니다. 나는 BPL에이 같은 라인을 가진 유닛을 가지고 있으며, 발견되지 않은 에러를 발생시킨다. ResourceHacker를 사용하여 자원이 올바른 이름으로 존재하는지 확인했습니다. 무슨 일있어? –

+0

BPL을 사용하는 장치의 'HInstance'값과 BPL을 호스팅하는 EXE의 장치에서 반환 된 값이 동일한 지 확인하기 만하면됩니다. –

관련 문제