2009-04-22 3 views
2

다중 플랫폼 응용 프로그램을 개발 중이며 한 구성 요소에 DrawText라는 클래스 메서드가 있습니다. 불행히도이 클래스의 DrawTextW 메서드에 대한 확인되지 않은 외부 기호가 있음을 알리는 링커 오류가 발생합니다 (Windows에서만 해당).DrawText 함수와의 충돌

필자가 정의한 FooText 메서드 대신 FooTextW 또는 FooTextA 메서드 중 하나를 찾고있는 "Text"로 끝나는 다른 메서드를 사용하여이 부분을 보았습니다. 내 가정은 Windows 헤더의 어딘가에 FooTextW 또는 FooTextA에 FooText를 할당하는 매크로 정의가 있다는 것입니다.

내 기능 (이전에 내가 한 기능)의 이름 바꾸기를 제외하고 누구나이 문제를 해결하기위한 좋은 아이디어가 있습니까?

감사합니다.

+0

위로 투표하십시오 : http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6656174-have-a-version-of-windows-h-that-doesn-t-define- 엄마 –

답변

0

예,이 Windows를 사용하는을 가진 진짜 문제이며, 방법은 헤더 모두가 같이 있기 때문에 그것을 해제 할 수 없습니다 :

#ifdef UNICODE 
#define GetDlgItemText GetDlgItemTextW 
#else 
#define GetDlgItemText GetDlgItemTextA 
#endif 

을 그래서 당신은 어느 쪽이든 정의 된 기호를받을거야 . # include'ing windows.h 이전에이 정의를 #define 할 수 있으면이 동작을 해제하지만 아무 것도 존재하지 않는 것이 좋습니다.

5

당신은 정말 단 두 가지 선택이 있습니다

#ifdef DrawText 
#undef DrawText 
#endif 

또는 함수의 이름을 바꿉니다. Win32는 네임 스페이스 또는 스코핑이없는 매크로를 사용하기 때문에 다소 방해가됩니다.

방금 ​​이름을 변경했습니다.

진술 : #ifdef 유니 코드 (또는 _UNICODE 또는 몇 가지 다른 변형)를 기반으로합니다.