2015-08-15 44 views
-1

我想了解为什么这是无效的IL代码和/或什么会导致此故障。XXX()中的IL代码无效:IL_0023:brfalse IL_00ba

引发的异常是:

System.InvalidProgramException:无效IL代码在 away3d.containers.View3D:updateBackBuffer():IL_0023:brfalse
IL_00ba

我拆开使用monodis和正在调用的方法(updateBackBuffer)并抛出错误如下,但我不能发现任何错误的声明或周围的IL:

// method line 841 
.method family virtual hidebysig newslot 
     instance default void updateBackBuffer() cil managed 
{ 
    // Method begins at RVA 0x1e4d4 
// Code size 226 (0xe2) 
.maxstack 5 
IL_0000: nop 
IL_0001: ldarg.0 
IL_0002: ldfld class away3d.core.managers.Stage3DProxy away3d.containers.View3D::_stage3DProxy 
IL_0007: callvirt instance class [pscorlib_monomac]flash.display3D.Context3D class away3d.core.managers.Stage3DProxy::get_context3D() 
IL_000c: brfalse IL_00e1 

IL_0011: ldarg.0 
IL_0012: ldfld bool away3d.containers.View3D::_shareContext 
IL_0017: brtrue IL_00e1 

IL_001c: nop 
IL_001d: ldarg.0 
IL_001e: ldfld float64 away3d.containers.View3D::_width 
IL_0023: brfalse IL_00ba 

IL_0028: ldarg.0 
IL_0029: ldfld float64 away3d.containers.View3D::_height 
IL_002e: brfalse IL_00ba 

IL_0033: nop 
IL_0034: ldarg.0 
IL_0035: ldfld class away3d.core.managers.Stage3DProxy away3d.containers.View3D::_stage3DProxy 
IL_003a: callvirt instance bool class away3d.core.managers.Stage3DProxy::get_usesSoftwareRendering() 
IL_003f: brfalse IL_008c 

IL_0044: nop 
IL_0045: ldarg.0 
IL_0046: ldfld float64 away3d.containers.View3D::_width 
IL_004b: ldc.r8 2048. 
IL_0054: ble.un IL_0068 

IL_0059: ldarg.0 
IL_005a: ldc.r8 2048. 
IL_0063: stfld float64 away3d.containers.View3D::_width 
IL_0068: ldarg.0 
IL_0069: ldfld float64 away3d.containers.View3D::_height 
IL_006e: ldc.r8 2048. 
IL_0077: ble.un IL_008b 

IL_007c: ldarg.0 
IL_007d: ldc.r8 2048. 
IL_0086: stfld float64 away3d.containers.View3D::_height 
IL_008b: nop 
IL_008c: ldarg.0 
IL_008d: ldfld class away3d.core.managers.Stage3DProxy away3d.containers.View3D::_stage3DProxy 
IL_0092: ldarg.0 
IL_0093: ldfld float64 away3d.containers.View3D::_width 
IL_0098: conv.i4 
IL_0099: ldarg.0 
IL_009a: ldfld float64 away3d.containers.View3D::_height 
IL_009f: conv.i4 
IL_00a0: ldarg.0 
IL_00a1: ldfld unsigned int32 away3d.containers.View3D::_antiAlias 
IL_00a6: conv.i4 
IL_00a7: ldc.i4.1 
IL_00a8: callvirt instance void class away3d.core.managers.Stage3DProxy::configureBackBuffer(int32, int32, int32, bool) 
IL_00ad: ldarg.0 
IL_00ae: ldc.i4.0 
IL_00af: stfld bool away3d.containers.View3D::_backBufferInvalid 
IL_00b4: nop 
IL_00b5: br IL_00e0 

IL_00ba: nop 
IL_00bb: ldarg.0 
IL_00bc: ldarg.0 
IL_00bd: callvirt instance class [pscorlib_monomac]flash.display.Stage class [pscorlib_monomac]flash.display.DisplayObject::get_stage() 
IL_00c2: callvirt instance int32 class [pscorlib_monomac]flash.display.Stage::get_stageWidth() 
IL_00c7: conv.r8 
IL_00c8: callvirt instance void class [pscorlib_monomac]flash.display.DisplayObject::set_width(float64) 
IL_00cd: ldarg.0 
IL_00ce: ldarg.0 
IL_00cf: callvirt instance class [pscorlib_monomac]flash.display.Stage class [pscorlib_monomac]flash.display.DisplayObject::get_stage() 
IL_00d4: callvirt instance int32 class [pscorlib_monomac]flash.display.Stage::get_stageHeight() 
IL_00d9: conv.r8 
IL_00da: callvirt instance void class [pscorlib_monomac]flash.display.DisplayObject::set_height(float64) 
IL_00df: nop 
IL_00e0: nop 
IL_00e1: ret 
} // end of method View3D::updateBackBuffer 

回答

1

也许是因为那个地方的加载值不是布尔值?

+0

大脑翻牌......我真的需要更多的咖啡。不知道我在哪里删除了双重转换(它以ActionScript编号开头)。 – SushiHangover