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 内から自動的にキャストするようには見えません。
助けてくれてありがとう。