0

我试图混淆一些 VB.NET 2003 应用程序。

生成的程序集被混淆并“运行”并出现一些错误。

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

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

此组合框可处理“男性 | M”或“女性 | F”等配对。

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

这段代码经过混淆处理后,会抛出一个异常,无法将类型“XX”转换为字符串“M”。

因此,我将代码更改为更正确的代码,将所选值显式转换为字符串:

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

但错误是一样的。

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

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

有没有人有想法在 Dotfucate 之后“翻译”这段代码以使其正常工作?

谢谢!

4

2 回答 2

1

来自 MSDN:

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

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

于 2010-03-02T06:02:13.300 回答
0

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

于 2010-03-01T14:18:25.457 回答