2013-01-13 3 views
0

많은 프로젝트로 구성된 MFC 솔루션을 작업 중입니다. 내 프로젝트 "App.exe"중 하나는 다른 프로젝트 출력 dll "SC.dll"에 따라 다릅니다.리소스 간 전환

다른 프로젝트에 대한 참조가 App 프로젝트의 참조 추가 옵션을 통해 추가되었습니다.

리소스 dll을 사용하여 언어 간을 전환 할 수있는 옵션을 원합니다. 아랍어 리소스 "SC_AR.dll"을 생성하는 다른 리소스 프로젝트가 있습니다.

옵션을 기반으로 LoadLibrary를 사용하려고했지만 실패했습니다.

  1. "참조 추가"방식이 잘못 되었습니까?
  2. 그렇지 않은 경우 어떻게 DLL간에 전환 할 수 있습니까?
  3. 그렇다면 올바른 접근 방법은 무엇입니까?
+0

이 있습니까? [MFC 응용 프로그램 용 지역화 된 리소스 DLL을 만드는 방법] (http://support.microsoft.com/kb/198846)? – Turbot

+0

네, 있습니다. 하지만 제 시나리오에는 해당되지 않습니다. >> 1- 내가 언급 한 것처럼 참조를 추가 한 응용 프로그램의 도우미 DLL을 사용하고 있습니다. >> 2- 도우미 Dll 자체를 현지화하려고합니다. 그리고 나는 LoadLibrary를 사용하지 않는다. >> 3- 현지화 된 프로젝트를 만들었으므로 옵션에 따라 전환하고 싶습니다. –

답변

0

MFC는 아랍어를 지원하지 않으므로 dll에서 아랍어 대화 상자와 아랍어 대화 상자를 만들었습니다. 그리고 Language 속성에 따라 리소스 ID를 대화 상자 생성자에게 보냅니다. 그리고 어떤 문자열에 대해서도 LoadString을 사용합니다

0

MFC를 사용하는 경우 리소스 dll은 주 파일에 생성 된 상용구에로드됩니다. (그것을 직접적으로 rememebr 수는 없지만) LoadResource()를 검색하십시오. 당신은 hmodule이 이것을 전달하도록 LoadLibrary를 호출해야 할 것입니다.

여러 dll 리소스를 표시하는 경우 다른 리소스 dll 대화 상자에주의해야합니다. 단순히 dll을 스와핑하는 경우 문제가 발생하지 않습니다.

+0

LoadLibrary를 호출하여 DLL 이름을 지정했지만 NULL이 반환됩니다. English DLL에 LoadLibrary를 사용하지 않았 음을 참고하십시오. 방금 참조를 추가했습니다.

2

resource satellite을 참조 할 필요가 없습니다. MFC는 사용자의 Windows UI 언어와 응용 프로그램의 파일 이름을 사용하여 위성 DLL을 검색합니다. 다른 위성으로 전환하려면 LoadLibrary()를 호출 한 다음 AfxSetResourceHandle()을 호출하십시오.

물론 MFC를 통해 모든 리소스를로드한다고 가정합니다 (예 : LoadResource 대신 CString :: LoadString 사용). API를 직접 호출하는 경우에는 자체 위성 DLL 핸들을 명시 적으로 사용해야합니다.

PS the less said about SetThreadLocale이 좋습니다.

+0

이것은 정확하지만 중첩 된 리소스로드에서는 작동하지 않습니다. 메인 애플 리케이션 리소스를로드 한 후에로드되지 않고 메인 exe 리소스를 언로드하는 또 다른 Dll 리소스를 설정해야합니다. –