2010-04-06 3 views
4

나는 C/C++가 혼합 된 커다란 프로젝트를 가지고 있습니다. 다음과 같이 ICU UnicodeString 클래스에 대한 간단한 비주얼 라이저를 만들었습니다.autoexp.dat 안에 간단한 VS2008 비주얼 라이저 만들기 (캐스팅 문제)

[inside autoexp.dat] 
icu_4_2::UnicodeString { 
     preview  ([$c.fUnion.fFields.fArray,su]) 
} 

... 괜찮습니다. 객체를 볼 때마다 디버거 내부에서 미리보기 행에있는 텍스트를 볼 수 있습니다.

난 후 다음과 같이 이들 개체 중 하나를 포함하는 래퍼 클래스 ...

class StringHandleData 
{ 
public: 
    icu_4_2::UnicodeString str; 
}; 

생성 ... 다음이 또 다른 비주얼 ...

[inside autoexp.dat] 
StringHandleData { 
    preview  ([$c.str.fUnion.fFields.fArray,su]) 
} 

생성 ... 다시, 잘 작동합니다. 디버거에서 StringHandleData 객체를 볼 때마다 문자열 내부에 텍스트가 표시됩니다. 나는이 같은 C 코드 내에서 사용할 수있는 형식 정의를 정의 할 때

그러나, 내 문제는 ... 후드 실제로 StringHandleData 객체에 불과 PTR이다

typedef void* StringHandle; 

을 ... 온다. 그래서이 같은 StringHandle 유형의 시각화 프로그램을 만들려고 할 때 ...

[inside autoexp.dat] 
StringHandle { 
    preview  ([((StringHandleData)$c).str.fUnion.fFields.fArray,su]) 
} 

... 작동하지 않습니다. 나는 물건을 던지기의 다른 많은 방법을 너무 많이 시도했지만 지금까지는 운이 없다. 내 시계 창으로 가서이 StringHandle 던지면 ... (StringHandleData *) stringHandle 다음 디버거가 캐스트 및 미리보기를 올바르게 -하지만 난 자동으로 내부에서 자동으로 그것을 얻을 수없는 것 .dat

어떤 도움을 주셔서 감사합니다.

+0

포인터를 역 참조하도록 디버거에 지시해야합니다. '* (StringHandleData *) '와 같은 것. –

+0

나는 거의 모든 조합을 시도했다고 생각 *, &,. -> 성공하지 못했습니다. 20 년 전 처음 C 언어를 배우기 시작했을 때 컴파일러 오류를 다루는 방법을 알고 싶습니다. – user97150

답변

3

visual studio의 visualiser는 typedef에 대해 눈이 멀어 StringHandlevoid *이라고 생각합니다.

관련 문제