Создание простого визуализатора VS2008 внутри autoexp.dat (проблема с приведением) - PullRequest
4 голосов
/ 06 апреля 2010

У меня большой проект смешанного C / C ++. Я создал простой визуализатор для класса ICU UnicodeString следующим образом ...

[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, как это ...

typedef void* StringHandle;

... который под капотом на самом деле просто ptr объекта StringHandleData. Поэтому, когда я пытаюсь создать визуализатор для типа StringHandle, как этот ...

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

... это не работает. Я пробовал много других способов кастования объекта, но пока безуспешно. Если я подойду к окну просмотра и приведу StringHandle следующим образом ... (StringHandleData *) stringHandle , тогда отладчик выполняет приведение и предварительный просмотр правильно, но я просто не могу заставить его это сделать автоматически изнутри autoexp.dat

Спасибо за любую помощь.

1 Ответ

3 голосов
/ 13 октября 2010

Визуализатор Visual Studio не использует typedefs и будет думать, что StringHandle - это void *.

...