當前位置: 首頁>>代碼示例>>VB.NET>>正文


VB.NET ILGenerator.BeginFaultBlock方法代碼示例

本文整理匯總了VB.NET中System.Reflection.Emit.ILGenerator.BeginFaultBlock方法的典型用法代碼示例。如果您正苦於以下問題:VB.NET ILGenerator.BeginFaultBlock方法的具體用法?VB.NET ILGenerator.BeginFaultBlock怎麽用?VB.NET ILGenerator.BeginFaultBlock使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。


在下文中一共展示了ILGenerator.BeginFaultBlock方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的VB.NET代碼示例。

示例1: ILGenerator_BeginFaultBlock

' 導入命名空間
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Security.Permissions

Public Class ILGenerator_BeginFaultBlock
   Public Shared Function AddType() As Type
      ' Create an assembly.
      Dim myAssemblyName As New AssemblyName()
      myAssemblyName.Name = "AdderExceptionAsm"
      
      ' Create dynamic assembly.
      Dim myAppDomain As AppDomain = Thread.GetDomain()
      Dim myAssemblyBuilder As AssemblyBuilder = myAppDomain.DefineDynamicAssembly _ 
                                              (myAssemblyName, AssemblyBuilderAccess.Run)
      
      ' Create a dynamic module.
      Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.DefineDynamicModule _ 
                                                ("AdderExceptionMod")
      Dim myTypeBuilder As TypeBuilder = myModuleBuilder.DefineType("Adder")
      Dim myAdderParams() As Type = {GetType(Integer), GetType(Integer)}
      
      ' Method to add two numbers.
      Dim myMethodBuilder As MethodBuilder = myTypeBuilder.DefineMethod _ 
               ("DoAdd", MethodAttributes.Public Or MethodAttributes.Static, GetType(Integer), _
                                                  myAdderParams)
      Dim myAdderIL As ILGenerator = myMethodBuilder.GetILGenerator()
      
      ' Create constructor.
      Dim myConstructorInfo As ConstructorInfo = GetType(OverflowException).GetConstructor _ 
                                                   (New Type() {GetType(String)})
      Dim myExToStrMI As MethodInfo = GetType(OverflowException).GetMethod("ToString")
      Dim myWriteLineMI As MethodInfo = GetType(Console).GetMethod _ 
                                  ("WriteLine", New Type() {GetType(String), GetType(Object)})
      
      ' Declare local variable.
      Dim myLocalBuilder1 As LocalBuilder = myAdderIL.DeclareLocal(GetType(Integer))
      Dim myLocalBuilder2 As LocalBuilder = myAdderIL.DeclareLocal(GetType(OverflowException))
      
      ' Define label.
      Dim myFailedLabel As Label = myAdderIL.DefineLabel()
      Dim myEndOfMethodLabel As Label = myAdderIL.DefineLabel()
      
      ' Begin exception block.
      Dim myLabel As Label = myAdderIL.BeginExceptionBlock()
      
      myAdderIL.Emit(OpCodes.Ldarg_0)
      myAdderIL.Emit(OpCodes.Ldc_I4_S, 10)
      myAdderIL.Emit(OpCodes.Bgt_S, myFailedLabel)
      
      myAdderIL.Emit(OpCodes.Ldarg_1)
      myAdderIL.Emit(OpCodes.Ldc_I4_S, 10)
      myAdderIL.Emit(OpCodes.Bgt_S, myFailedLabel)
      
      myAdderIL.Emit(OpCodes.Ldarg_0)
      myAdderIL.Emit(OpCodes.Ldarg_1)
      myAdderIL.Emit(OpCodes.Add_Ovf_Un)
      myAdderIL.Emit(OpCodes.Stloc_S, myLocalBuilder1)
      myAdderIL.Emit(OpCodes.Br_S, myEndOfMethodLabel)
      
      myAdderIL.MarkLabel(myFailedLabel)
      myAdderIL.Emit(OpCodes.Ldstr, "Cannot accept values over 10 for addition.")
      myAdderIL.Emit(OpCodes.Newobj, myConstructorInfo)
      
      myAdderIL.Emit(OpCodes.Stloc_S, myLocalBuilder2)
      myAdderIL.Emit(OpCodes.Ldloc_S, myLocalBuilder2)
      
      ' Call fault block.
      myAdderIL.BeginFaultBlock()
      Console.WriteLine("Fault block called.")
      'Throw exception.
      myAdderIL.ThrowException(GetType(NotSupportedException))
      
      ' Call finally block.
      myAdderIL.BeginFinallyBlock()
      
      myAdderIL.Emit(OpCodes.Ldstr, "{0}")
      myAdderIL.Emit(OpCodes.Ldloc_S, myLocalBuilder2)
      myAdderIL.EmitCall(OpCodes.Callvirt, myExToStrMI, Nothing)
      myAdderIL.EmitCall(OpCodes.Call, myWriteLineMI, Nothing)
      myAdderIL.Emit(OpCodes.Ldc_I4_M1)
      myAdderIL.Emit(OpCodes.Stloc_S, myLocalBuilder1)
      
      ' End exception block.
      myAdderIL.EndExceptionBlock()
      
      myAdderIL.MarkLabel(myEndOfMethodLabel)
      myAdderIL.Emit(OpCodes.Ldloc_S, myLocalBuilder1)
      myAdderIL.Emit(OpCodes.Ret)
      
      Return myTypeBuilder.CreateType()
   End Function 'AddType
   
   <PermissionSetAttribute(SecurityAction.Demand, Name:="FullTrust")> _   
   Public Shared Sub Main()
      Dim myAddType As Type = AddType()
      Dim myObject1 As Object = Activator.CreateInstance(myAddType)
      Dim myObject2() As Object = {11, 12}
      
      ' Invoke member.
      myAddType.InvokeMember("DoAdd", BindingFlags.InvokeMethod, Nothing, myObject1, myObject2)
   End Sub
End Class
開發者ID:VB.NET開發者,項目名稱:System.Reflection.Emit,代碼行數:104,代碼來源:ILGenerator.BeginFaultBlock


注:本文中的System.Reflection.Emit.ILGenerator.BeginFaultBlock方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。