2011-04-27 4 views
1

내가 지정이(때문에) findResource는

IDB_PNG1    PNG      "images\\list-back.png" 
    HRSRC hrsrc = FindResource(module, MAKEINTRESOURCE(IDB_PNG1), TEXT("PNG")); 
이 잘 작동

,
가 하지만 그것은

hrsrc = ::FindResource(module, L"images\\list-back.png", L"PNG"); 
    hrsrc = ::FindResource(module, L"images\\list-back", L"PNG"); 
    hrsrc = ::FindResource(module, L"list-back.png", L"PNG"); 
    hrsrc = ::FindResource(module, L"list-back", L"PNG"); 

GetlastError 아래의 변종 중 하나를 작동 할 수 없습니다 반환 0x00000716 등 코드의 조각을 가지고 실패 자원 이름을 이미지 파일에서 찾을 수 없습니다.
문자열로 검색하는 올바른 문자열 형식/방법은 무엇입니까?

편집 : .rc가 생성되며 .html 및 .png 파일이 포함됩니다. exe 파일을 다시 컴파일하지 않고 해당 파일을 찾아로드 할 수 있어야합니다. 어떻게 든 .html에서 .png가 사용하고있는 것을 식별 할 수 있어야합니다. exe에서는 FindResource 및로드보다 해당 경로/ID가 수신됩니다. 이 작업을 수행 할 수 있습니까?

+0

은 비슷한 문제가있다. MAKEINTRESOURCE (ID)를 사용하여 findresource를 시도했는데이 코드는 작동하지 않는다. FindResource (TEXT ("ID"), ..) 그것은 기적적으로 작동했습니다. @EFraim이 제안한 것과 비슷합니다 – estoy

답변

3

RCDATA 줄의 첫 번째 항목은 이름 (또는 ID)입니다. 마지막 항목은 "리소스 컴파일러가이 항목을 만드는 데 사용해야하는 것"입니다.이 이름은 실행 파일에 저장되지 않습니다.

FOO RCDATA "images\\list-back.png" 

... 

::FindResource(module, L"FOO", RT_RCDATA); 
+0

IDB_PNG1 문자열 또는 int를 얻을 수 없어 작동하지 않으며 어쨌든 유용하지 않습니다. 이미지 \\ list-back.png를 콜백 리소스 – cprogrammer

+0

에 수신합니다. @cprogrammer : RCDATA를 사용하면 작동합니다. 리소스를 만드는 데 사용 된 파일 이름은 리소스 테이블에 저장되지 않습니다. 이름/식별자는 리소스 테이블에 저장됩니다. – Erik

+1

여전히 MAKEINTRESOURCE (FOO)를 사용해야하며 "FOO"와 함께 작동하지 않습니다. 최소한 리소스가 DLL에 있고 호출이 exe 인 경우. 나는 PEExplorer로 보았고 당신이 맞다. 경로는 리소스 테이블에 저장되지 않는다. 죽은 방법이지만, .rc (rc가 생성 될 것이다)에서 리소스를 링크하는 방법을 찾아야한다. exe에서 리소스를 "찾을"수 있습니다 (exe를 다시 컴파일하지 않고). – cprogrammer

0

또한이 같은 대신 숫자 ID의 문자열 ID와 자원을 저장할 수 있습니다 :

list-back PNG "images\\list-back.png"

은 그럼 당신은 참으로 수행 할 수 있습니다

hrsrc = ::FindResource(module, L"list-back", L"PNG");

이것은 Erik에서 제공하는 솔루션보다 비효율적이지만 일부 기능을 사용하려고하면 더 쉽게 관리 할 수 ​​있습니다. 정적 라이브러리라고하는 반면, 리소스 자체는 나중 단계에서 DLL/EXE에 포함됩니다. (당신은 숫자 ID를 알 필요가 없다. 모듈의 심볼 이름에 동의한다.)