2010-03-01 72 views
0

我想混淆一些VB.NET 2003应用程序。Dotfuscator混淆后的Casting问题

生成的装配被混淆并“运行”出现一些错误。

我清除了所有潜在的反射问题,但我无法读取选定的组合框的值。

我使用他们的数据源属性加载组合框,使用“VTPair”(由我2个属性创建的类:字符串型的一个和其他对象类型的存储值)的集合

该组合框处理像“Male | M”或“Female | F”的对。

当试图查看选择了什么,我用if mycombo1.SelectedValue = "M" then

此代码,混淆后,投我无法投型“XX”串“M”的异常。

于是,我改变了代码的东西更正确,所选择的值明确转换为String:

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

但错误是一样的。

调试我的原始代码,SelectedValue属性是类型“对象”,但它是一个字符串。

我试过使用ComboBox.SelectedItem属性,这也是一个对象,但这次内部是类型“VTPair”(我自己的类),然后尝试访问其“Value”属性(它是Object类型)和试图转换为字符串再次失败。

有没有人有一个想法,“翻译”这段代码后工作确定Dotfucate它?

谢谢!

+0

除读取值时出现异常外,用户界面是否正确,即期望值是否显示在组合框中? – Timores 2010-03-01 14:29:02

回答

1

从MSDN:

ListControl.SelectedValue性质: 获取或设置由ValueMember属性指定的成员属性的值。

因此,当您使用SelectedValue属性时,将使用为ValueMember属性设置的任何属性NAME。因此,您可能需要从混淆中排除您通过ComboBox.ValueMember属性指定的属性。

+0

我使用文本/值对从模糊处理中排除了整个班级并开始工作。但我从来没有想过ValueMember属性是问题。非常感谢! – Romias 2010-03-03 13:45:18

0

不确定的VB语法,但在C#我认为你会想要的东西右手边是typeof(MyType)。通过这种方式,类型将被混淆以匹配重命名的类型。

+0

这是非常真实的反射问题。如果您使用GetType.ToString(),然后在混淆后对其进行比较,它将无法工作。但我的情况是CAST问题。 – Romias 2010-03-01 14:21:33

+0

myCombo.SElectedValue.ToString()? – 2010-03-01 14:38:46