2010-03-01 55 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