2012-07-21 7 views
1

Adobe ActiveX 컨트롤 (Adobe Reader X가 설치되어 있음)을 사용하는 Visual Studio 2008에서 개발 된 MFC 응용 프로그램이 있습니다. setViewRect 함수를 사용하여 확대/축소 사각형을 설정하려고하면 완벽하게 작동합니다.ActiveX 컨트롤 - MFC 로캘

이제 내 Windows 국가 별 설정에서 십진 기호가 점 대신 쉼표 (예 : 독일어 국가 별 설정)로 설정된 경우 문제가 나타납니다. 확대/축소 사각형의 매개 변수가 잘못 해석 된 것 같습니다.

ProcessMonitor를 사용하여 Adobe ActiveX 컨트롤이 만들어지고 해당 프로세스에서 DLL이로드 될 때 setlocale을 호출하므로 응용 프로그램이 기본 "C"로캘 대신 현재 Windows 국가 별 설정을 사용하고 있음을 알게되었습니다. 따라서 응용 프로그램이 잘못된 방식으로 숫자를 해석합니다.

Adobe를로드 한 직후에 로케일을 "C"로 재설정하려고 시도했지만이 해결 방법으로 문제가 해결되었습니다.

이제 응용 프로그램을 Visual Studio 2010으로 마이그레이션 할 때 문제가 다시 발생했습니다. 분명히 Adobe DLL ("c : \ Program Files (x86) \ Common Files \ Adobe \ Acrobat \ ActiveX \ AcroPDF.dll")은 다음을 사용하여 개발되었습니다. Visual Studio 2008. 로케일을 설정할 때 MSVCR90.dll에서 로캘을 설정합니다. 로케일을 리셋 할 때, 나는 같은 DLL을 사용했다.

내 응용 프로그램이 VS2010이므로 setlocale 호출은 MSVCR100.dll에서 수행되므로 MSVCR90.dll에 이미 설정된 로캘에는 영향을주지 않습니다.

내 응용 프로그램에서 호스팅하는 COM 개체의 로캘을 설정하는 방법이 있습니까?

이는 어둠 속에서 단지 샷을 사전 :

답변

0

에 정말 감사합니다,하지만 당신은 DLL이 이미로드되어 있기 때문에, 그냥 당신에게주지 (LoadLibrary에 MSVCR90.dll로드 시도 할 수 핸들을 두 번로드하지 않음), setlocale 함수에 대한 포인터를 GetProcAddress으로 찾습니다. 그러면이 DLL에 대해 setlocale 함수를 호출 할 수 있습니다. 추한 해킹이지만 작동 할 수도 있습니다.

+0

답장을 보내 주셔서 감사합니다 :) 불행하게도 LoadLibrary (_T ("MSVCR90.dll"))는 NULL 핸들을 반환합니다. 작동하지 않는 MSVCR90.dll (C : \\ Windows \\ winsxs \\ x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_50934f2ebcb7eb57 \\ msvcr90.dll)의 전체 경로가있는 LoadLibrary가 작동하는 경우에만 작동합니다. – dood

+0

하지만 전체 경로로 시도해도 작동합니까? – sashoalm

+0

예. :) 팁 주셔서 감사합니다. 응용 프로그램에서 전체 경로를 사용할 수 없습니다. – dood