2016-10-13 2 views
0

이미이 문제에 대한 해결책을 찾았으므로 나에게 도움이되는 제안이 없으므로 놓친 것이 있거나 잘못되었습니다.Delphi 패키지 리소스 - EResNotFound

필자는 Delphi XE2 응용 프로그램 내에 다수의 패키지를 보유하고 있습니다.이 패키지 중 몇 개의 패키지에는 궁극적으로 PNG 이미지 인 RCDATA 리소스가 포함되어 있습니다.

리소스를 사용하는 컨트롤은 Delphi XE2 디자이너에서 정상적으로 작동합니다. 리소스는 예상대로로드되고 그려집니다. 응용 프로그램이 실행될 때, 내가 할

handle := FindClassHInstance(Self.ClassType); 
fPlaneImage := TPngImage.Create; 
fPlaneImage.LoadFromResourceName(handle, 'IDC_IMG_PLANE'); 

그리고 : I 패키지/제어가 사용되는 주요 응용 프로그램을 실행 올 때 제어 시도 리소스 항목을로드 할 때, 나는 EResNotFound 예외 제시하고있어 다음과 같은 오류 : 나는 디버거에서 continue을 치면

Project PinPoint.exe raised exception class EResNotFound with message IDC_IMG_PLANE not found'.

그리고, 나는 다음 얻을 : 나는 핸들의 모든 변형을 전달하려고했습니다

Project PinPoint.exe raise exception class EPNGCouldNotLoadResource with message 'The png image could not be loaded from the resource ID.'.

fPlaneImage.LoadFromResourceName(HInstance, 'IDC_IMG_PLANE'); 
fPlaneImage.LoadFromResourceName(GetModuleHandle('AppCore.bpl'), 'IDC_IMG_PLANE'); 
fPlaneImage.LoadFromResourceName(FindClassHInstance(Self.ClassType), 'IDC_IMG_PLANE'); 

그러나 모두 동일한 예외가 발생합니다.

모든 리소스가 포함 된 독립 실행 형 패키지를 만드는 것이 더 쉬운지 고려한 다음 각 리소스가있는 각 패키지보다는 프로젝트 내의 다른 패키지 각각에서이 리소스를 참조하는 것이 더 쉬운지 고려했습니다. 이것이 실제로 효과가 있을지에 관해서.

누구든지 조언을 제공 할 수 있습니다.

+0

오류 메시지는 꽤 분명하지? –

+0

@DavidHeffernan, 글쎄, 나는 리소스가 존재한다는 것을 제외하고는 그렇게 가정했을 것이다. – weblar83

+0

오류 메시지에 다른 의미가 있습니다. –

답변

-1

FindResModule 함수를 사용하여 리소스 모듈을 가져 오십시오.

// use fPlaneImage.LoadFromResourceName(FindResModule('IDC_IMG_PLANE'), 'IDC_IMG_PLANE'); 

function FindResModule(const AResourceName: string): HINST; 
var 
    LModule: PLibModule; 
begin 
    LModule := LibModuleList; 
    while Assigned(LModule) do 
    begin 
    Result := LModule.Instance; 
    if (Result <> 0) and (FindResource(Result, PChar(AResourceName), RT_RCDATA) <> 0) then 
     Exit; 

    LModule := LModule^.Next; 
    end; 

    Result := 0; 
end; 

실패 할 가능성이 가장 높은 리소스는 "링커에서 제거"됩니다. 예를 들어 자신 만의 패키지를 만들고 패키지 또는 응용 프로그램 파일에 자원이있는 장치를 추가하지 않을 때 발생할 수 있습니다. 응용 프로그램의 uses 절에 장치를 추가하기 만하면됩니다.

리소스에 대해 별도의 패키지를 만드는 경우 아무런 해가 없습니다. 그것은 잘 작동해야하지만 실제로 필요하지 않습니다. 하나의 작은 힌트, BPL 패키지가 필요하지 않습니다, 당신은 DLL에 리소스를 팩 수 있습니다

관련 문제