J'ai un grand projet de C/C++ mixte. J'ai créé simple Visualiseur pour la classe ICU UnicodeString comme suit ...Création d'un visualiseur VS2008 simple à l'intérieur de autoexp.dat (problème de casting)
[inside autoexp.dat]
icu_4_2::UnicodeString {
preview ([$c.fUnion.fFields.fArray,su])
}
... et qui fonctionne bien. Dans le débogueur, partout où je vois l'objet, je vois maintenant le texte à l'intérieur de la ligne d'aperçu.
J'ai ensuite créé une classe d'emballage contenant un de ces objets comme suit ...
class StringHandleData
{
public:
icu_4_2::UnicodeString str;
};
... puis a créé une autre Visualiseur pour cette ...
[inside autoexp.dat]
StringHandleData {
preview ([$c.str.fUnion.fFields.fArray,su])
}
... ce qui encore, fonctionne bien. Chaque fois que je vois un objet StringHandleData dans le débogueur, je vois le texte à l'intérieur de la chaîne.
Cependant, mon problème vient quand je définir un typedef je peux utiliser à l'intérieur du code C comme ça ...
typedef void* StringHandle;
... qui, sous le capot est en fait juste un PTR à un objet StringHandleData. Donc, quand je tente de créer un visualisateur pour le type StringHandle comme ça ...
[inside autoexp.dat]
StringHandle {
preview ([((StringHandleData)$c).str.fUnion.fFields.fArray,su])
}
... ça ne fonctionne pas. J'ai essayé beaucoup d'autres façons de lancer l'objet, mais sans aucune chance jusqu'à présent. Si je vais à ma fenêtre de surveillance et lance un StringHandle comme ceci ... (StringHandleData *) stringHandle alors le débogueur rend le cast et les aperçus correctement - mais je n'arrive pas à le faire le faire automatiquement depuis l'intérieur d'autoexp .dat
Merci pour toute aide.
Vous devez indiquer au débogueur de déréférencer le pointeur. Quelque chose comme '* (StringHandleData *)'. –
Je pense que j'ai essayé presque toutes les combinaisons de *, &,. et -> sans succès. On se sent comme je l'utilise pour faire face à des erreurs de compilateur il y a 20 ans quand j'ai commencé à apprendre C. – user97150