4

我有一个混合 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 对象的指针。因此,当我尝试为这样的 StringHandle 类型创建可视化工具时......

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

......它不起作用。我也尝试了许多其他投射对象的方法,但到目前为止没有运气。如果我去我的监视窗口并像这样投射一个 StringHandle... (StringHandleData*)stringHandle那么调试器会正确地进行投射和预览 - 但我似乎无法让它从 autoexp.dat 内部自动完成

谢谢你的帮助。

4

1 回答 1

3

Visual Studio 的可视化器对 typedef 视而不见,会认为StringHandlevoid *.

于 2010-10-13T08:54:17.873 回答