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 オブジェクトへの単なる ptr です。したがって、このような 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 に答える