2010-03-01 6 views
0

J'essaie de masquer certaines applications VB.NET 2003.Problème de moulage après obfuscation avec Dotfuscator

Les assemblages résultants sont obfusqués et "exécutés" avec quelques erreurs.

J'ai nettoyé tous les problèmes de réflexion potentiels, mais je ne suis pas en mesure de lire la valeur sélectionnée d'une liste déroulante.

je charge le Combobox en utilisant leurs propriétés Datasource, en utilisant une collection de « VTPair » (une classe créée par moi avec 2 propriétés: un de type chaîne et d'autres du type d'objet pour stocker la valeur)

Ce combobox gérer des paires comme "Male | M" ou "Female | F".

Lorsque vous essayez de voir ce qui est sélectionné, j'utilise if mycombo1.SelectedValue = "M" then

Ce code, après l'obscurcissement, me jette une exception qui ne peut pas lancer de type « XX » à la chaîne « M ».

Alors, j'ai changé le code pour quelque chose de plus correct, coulée explicitement la valeur sélectionnée en chaîne:

if ctype(mycombo1.SelectedValue,string) = "M" then

Mais l'erreur est la même. Déboguer mon code original, la propriété SelectedValue est de type "Object" mais c'est une chaîne.

J'ai essayé d'utiliser la propriété ComboBox.SelectedItem qui est aussi un objet mais cette fois ce qui est à l'intérieur est de type "VTPair" (ma propre classe) et essaie d'accéder à sa propriété "Value" (qui est de type Object) et essayer de lancer à la chaîne échoue à nouveau.

Quelqu'un a-t-il une idée pour "traduire" ce morceau de code pour qu'il fonctionne correctement après Dotfucate?

Merci!

+0

À l'exception de l'exception lors de la lecture de la valeur, l'interface utilisateur est-elle correcte, c'est-à-dire que les valeurs attendues sont affichées dans la zone de liste déroulante? – Timores

Répondre

1

De MSDN:

ListControl.SelectedValue Propriété: Obtient ou définit la valeur de la propriété de membre spécifié par la propriété ValueMember.

Ainsi, la propriété NAME que vous définissez pour la propriété ValueMember sera utilisée lorsque vous utiliserez la propriété SelectedValue. Vous devrez donc peut-être exclure de l'obfuscation la propriété que vous spécifiez via la propriété ComboBox.ValueMember.

+0

J'ai exclu de l'obfuscation toute la classe avec la paire Texte/Valeur et travaillé. Mais je n'ai jamais pensé à la propriété ValueMember étant le problème. Merci beaucoup! – Romias

0

Je ne suis pas sûr de la syntaxe VB mais en C# je pense que vous voudriez quelque chose où le côté droit est typeof (MyType). De cette façon, le type sera obfusqué pour correspondre au type renommé.

+0

Ceci est TRUE avec des problèmes de réflexion. Si vous utilisez un GetType.ToString(), puis le compare ... après l'obfuscation, cela ne fonctionnera pas. Mais mon cas est un problème CAST. – Romias

+0

myCombo.SElectedValue.ToString()? –