在autoexp.dat中创建一个简单的VS2008可视化工具(有关转换的问题)

时间:2010-04-06 10:54:10

标签: c++ visual-studio-2008 casting visualizer

我有一个混合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时,问题出现了......

typedef void* StringHandle;

...在幕后实际上只是一个StringHandleData对象的ptr。所以当我尝试为StringHandle类型创建一个可视化器时,就像这样......

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

......它不起作用。我已经尝试了许多其他方法来投射对象,但到目前为止还没有运气。如果我进入我的观察窗口并像这样投射一个StringHandle ...... (StringHandleData *)stringHandle 那么调试器会正确地进行演员和预览 - 但我似乎无法让它做到它自动来自autoexp.dat

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

Visual Studio的可视化工具对typedef视而不见,并认为StringHandlevoid *