内部目的で vb.net を使用してプロジェクトを開発し、それを難読化しました。以下のようにエラーを投げています。
「タイプ 'e' のパブリック メンバー 'Var1' が見つかりません。」</p>
コード:
Public Sub get_constants_from_DbList(ByRef frm As Object, ByRef sDbname As String)
For Each Row As DataRow In CommonObj.DSCommonProc.Tables("dblist").Rows
If StrComp(Row("DbName").ToString, sDbname, CompareMethod.Text) = 0 Then
prg_id = Row("PrgId").ToString
frm.Var1= Row("ChangesDbName").ToString
frm.Var2 = Row("LoadTableName").ToString
frm.Var3 = Row("ServerName").ToString
Exit Sub
End If
Next
End Sub
フォーム (FrmMain という名前) は、呼び出し元のプロシージャからこのサブルーチンへのパラメーター 'frm' に渡されます。Var1 などは、その形式のパブリック変数です。
私たちが試した難読化ツールは –
スマートアセンブリ 6
PreEmptive Dotfuscator および Analytics CE (Visual Studio 2012 に付属)
難読化なしでexeは正常に動作しています。
サブルーチンで変数 'Var1' を割り当てているときにエラーがスローされます。コード行を次のように変更すると、難読化された exe が正常に動作します。
FrmMain.Var1= Row("ChangesDbName").ToString
難読化には遅延バインディングが欠けていると考え、小さなサンプル プロジェクトで同様のタイプのコードを試しました。しかし、それにはエラーはありませんでした。この小さなコードを添付しました。しかし、その大きさのため、オリジナルのプロジェクトをアップロードすることはできません。
どうすればエラーを追跡できますか?
私のサンプル アプリケーションのソース コードは、ここにあります。