///將十六進(jìn)制轉(zhuǎn)化為AGRB/////////publicstaticColorHexadecimalToArgb(stringHexadecimal){stringtext=string.Empty;intnum=1;byteb=255;intnum" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

ILGenerator.Emit動(dòng)態(tài) MSIL編程(二)之基礎(chǔ)

系統(tǒng) 1634 0
      
            public
      
      
        sealed
      
      
        class
      
      
         ColorToArgb

    {

        
      
      
        ///
      
      
        <summary>
      
      
        ///
      
      
         將十六進(jìn)制轉(zhuǎn)化為AGRB

        
      
      
        ///
      
      
        </summary>
      
      
        ///
      
      
        <param name="Hexadecimal"></param>
      
      
        ///
      
      
        <returns></returns>
      
      
        public
      
      
        static
      
       Color HexadecimalToArgb(
      
        string
      
      
         Hexadecimal)

        {



            
      
      
        string
      
       text = 
      
        string
      
      
        .Empty;

            
      
      
        int
      
       num = 
      
        1
      
      
        ;

            
      
      
        byte
      
       b = 
      
        255
      
      
        ;

            
      
      
        int
      
      
         num2;

            
      
      
        switch
      
      
         (Hexadecimal.Length)

            {

                
      
      
        case
      
      
        4
      
      
        :

                    num2 
      
      = 
      
        1
      
      
        ;

                    text 
      
      = 
      
        "
      
      
        F
      
      
        "
      
      
        ;

                    
      
      
        goto
      
      
         IL_9D;

                
      
      
        case
      
      
        5
      
      
        :

                    num2 
      
      = 
      
        1
      
      
        ;

                    text 
      
      = 
      
        "
      
      
        F
      
      
        "
      
      
        ;

                    b 
      
      = Convert.ToByte(Hexadecimal.Substring(num, num2) + text, 
      
        16
      
      
        );

                    num 
      
      +=
      
         num2;

                    
      
      
        goto
      
      
         IL_9D;

                
      
      
        case
      
      
        7
      
      
        :

                    num2 
      
      = 
      
        2
      
      
        ;

                    
      
      
        goto
      
      
         IL_9D;

                
      
      
        case
      
      
        9
      
      
        :

                    num2 
      
      = 
      
        2
      
      
        ;

                    b 
      
      = Convert.ToByte(Hexadecimal.Substring(num, num2) + text, 
      
        16
      
      
        );

                    num 
      
      +=
      
         num2;

                    
      
      
        goto
      
      
         IL_9D;

            }

            num2 
      
      = 
      
        2
      
      
        ;

            Hexadecimal 
      
      = 
      
        "
      
      
        #FFFFFF
      
      
        "
      
      
        ;

        IL_9D:

            
      
      
        byte
      
       b2 = Convert.ToByte(Hexadecimal.Substring(num, num2) + text, 
      
        16
      
      
        );

            
      
      
        byte
      
       b3 = Convert.ToByte(Hexadecimal.Substring(num += num2, num2) + text, 
      
        16
      
      
        );

            
      
      
        byte
      
       b4 = Convert.ToByte(Hexadecimal.Substring(num + num2, num2) + text, 
      
        16
      
      
        );

            
      
      
        return
      
      
         Color.FromArgb(b, b2, b3, b4);

        }

    }
      
    
    
        
          class
        
        
           Program

    {

        
        
        
          static
        
        
          void
        
         Main(
        
          string
        
        
          [] args)

        {

            
        
        
          #region
        
        
          var
        
         asmName = 
        
          new
        
         AssemblyName(
        
          "
        
        
          Test
        
        
          "
        
        
          );

            
        
        
          var
        
         asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndSave);
        
          //
        
        
          創(chuàng)建程序集
        
        
          var
        
         mdlBldr = asmBuilder.DefineDynamicModule(
        
          "
        
        
          Test
        
        
          "
        
        , 
        
          "
        
        
          Test.dll
        
        
          "
        
        );
        
          //
        
        
          定義模塊
        
        
          var
        
         typeBldr = mdlBldr.DefineType(
        
          "
        
        
          ColorToArgb
        
        
          "
        
        , TypeAttributes.Public|TypeAttributes.Class|TypeAttributes.Sealed);
        
          //
        
        
          定義類
        
        
          var
        
         methodBldr = typeBldr.DefineMethod(
        
          "
        
        
          HexadecimalToArgb
        
        
          "
        
        
          , MethodAttributes.Public,CallingConventions.Standard, 

                
        
        
          typeof
        
        (Color), 
        
          new
        
         Type[] { 
        
          typeof
        
        (
        
          string
        
        ) });
        
          //
        
        
          定義方法
        
        
          var
        
         MyILGenerator = methodBldr.GetILGenerator();
        
          //
        
        
          獲取il生成器
        
        

            MyILGenerator.DeclareLocal(
        
          typeof
        
        (
        
          string
        
        ));
        
          //
        
        
          注冊(cè)變量 string text
        
        

            MyILGenerator.DeclareLocal(
        
          typeof
        
        (
        
          int
        
        ));
        
          //
        
        
          int num ;
        
        

            MyILGenerator.DeclareLocal(
        
          typeof
        
        (
        
          byte
        
        ));
        
          //
        
        
          byte b;
        
        

            MyILGenerator.DeclareLocal(
        
          typeof
        
        (
        
          int
        
        ));
        
          //
        
        
          int num2;
        
        
          var
        
         b2 = MyILGenerator.DeclareLocal(
        
          typeof
        
        (
        
          byte
        
        
          ));

            
        
        
          var
        
         b3 = MyILGenerator.DeclareLocal(
        
          typeof
        
        (
        
          byte
        
        
          ));

            
        
        
          var
        
         b4 = MyILGenerator.DeclareLocal(
        
          typeof
        
        (
        
          byte
        
        
          ));

            
        
        
          var
        
         color = MyILGenerator.DeclareLocal(
        
          typeof
        
        
          (Color));

            

            
        
        
          #endregion
        
        
          #region
        
        
          //
        
        
          Label defaultCase = MyILGenerator.DefineLabel();
        
        

            Label endOfMethod =
        
           MyILGenerator.DefineLabel();

            Label forLabel 
        
        =
        
           MyILGenerator.DefineLabel();

            Label[] jumpTable 
        
        = 
        
          new
        
        
           Label[] { MyILGenerator.DefineLabel(),MyILGenerator.DefineLabel(),

                      MyILGenerator.DefineLabel(), MyILGenerator.DefineLabel() };

            MyILGenerator.Emit(OpCodes.Ldsfld, 
        
        
          string
        
        .Empty); 
        
          //
        
        
          壓棧賦值
        
        
                      MyILGenerator.Emit(OpCodes.Stloc_0);

            MyILGenerator.Emit(OpCodes.Ldc_I4, 
        
        
          1
        
        
          );

            MyILGenerator.Emit(OpCodes.Stloc_1);

            MyILGenerator.Emit(OpCodes.Ldc_I4, 
        
        
          0XFF
        
        
          );

            MyILGenerator.Emit(OpCodes.Stloc_2);

            MyILGenerator.Emit(OpCodes.Ldarg, 
        
        
          0
        
        );
        
          //
        
        
          Ldarg是加載方法參數(shù)的意思。這里arg_0事實(shí)上是對(duì)當(dāng)前對(duì)象的引用即this
        
        

            MyILGenerator.Emit(OpCodes.Callvirt, 
        
          typeof
        
        (
        
          string
        
        ).GetProperty(
        
          "
        
        
          Length
        
        
          "
        
        
          ).GetGetMethod());

            LocalBuilder length 
        
        = MyILGenerator.DeclareLocal(
        
          typeof
        
        (
        
          int
        
        
          ));

            MyILGenerator.Emit(OpCodes.Stloc_S, length);

            MyILGenerator.Emit(OpCodes.Ldloc_S, length); 

            MyILGenerator.Emit(OpCodes.Ldc_I4_4);

            MyILGenerator.Emit(OpCodes.Sub);

            MyILGenerator.Emit(OpCodes.Switch,jumpTable);

            
        
        
          //
        
        
          MyILGenerator.Emit(OpCodes.Br_S, defaultCase);
        
        

            MyILGenerator.MarkLabel(jumpTable[
        
          0
        
        
          ]);

            MyILGenerator.Emit(OpCodes.Ldc_I4_1);

            MyILGenerator.Emit(OpCodes.Stloc_3);

            

            MyILGenerator.Emit(OpCodes.Ldstr, 
        
        
          "
        
        
          F
        
        
          "
        
        
          );

            MyILGenerator.Emit(OpCodes.Stloc_0);

            MyILGenerator.Emit(OpCodes.Ldarg_0);

            MyILGenerator.Emit(OpCodes.Ldloc_1);

            MyILGenerator.Emit(OpCodes.Ldloc_3);

            MyILGenerator.Emit(OpCodes.Callvirt, 
        
        
          typeof
        
        (
        
          string
        
        ).GetMethod(
        
          "
        
        
          Substring
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (Int32), 
        
          typeof
        
        
          (Int32) }));

            MyILGenerator.Emit(OpCodes.Ldloc_0);

            MyILGenerator.Emit(OpCodes.Call, 
        
        
          typeof
        
        (
        
          string
        
        ).GetMethod(
        
          "
        
        
          Concat
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (
        
          string
        
        ), 
        
          typeof
        
        (
        
          string
        
        
          ) }));

            MyILGenerator.Emit(OpCodes.Ldc_I4_S, 
        
        
          16
        
        
          );

            MyILGenerator.Emit(OpCodes.Call, 
        
        
          typeof
        
        (Convert).GetMethod(
        
          "
        
        
          ToByte
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (
        
          string
        
        ), 
        
          typeof
        
        
          (Int32) }));

            MyILGenerator.Emit(OpCodes.Stloc_2);

            MyILGenerator.Emit(OpCodes.Ldloc_1);

            MyILGenerator.Emit(OpCodes.Ldloc_3);

            MyILGenerator.Emit(OpCodes.Add);

            MyILGenerator.Emit(OpCodes.Stloc_1);

            
        
        
          //
        
        
          MyILGenerator.Emit(OpCodes.Br_S, endOfMethod);
        
        

            MyILGenerator.MarkLabel(jumpTable[
        
          1
        
        
          ]);

            MyILGenerator.Emit(OpCodes.Ldc_I4_2);

            MyILGenerator.Emit(OpCodes.Stloc_3);

            
        
        
          //
        
        
          MyILGenerator.Emit(OpCodes.Br_S, endOfMethod);
        
        

            MyILGenerator.MarkLabel(jumpTable[
        
          2
        
        
          ]);

            MyILGenerator.Emit(OpCodes.Ldc_I4_2);

            MyILGenerator.Emit(OpCodes.Stloc_3);

            MyILGenerator.Emit(OpCodes.Ldarg_0);

            MyILGenerator.Emit(OpCodes.Ldloc_1);

            MyILGenerator.Emit(OpCodes.Ldloc_3);

            MyILGenerator.Emit(OpCodes.Callvirt, 
        
        
          typeof
        
        (
        
          string
        
        ).GetMethod(
        
          "
        
        
          Substring
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (Int32), 
        
          typeof
        
        
          (Int32) }));

            MyILGenerator.Emit(OpCodes.Ldloc_0);

            MyILGenerator.Emit(OpCodes.Call, 
        
        
          typeof
        
        (
        
          string
        
        ).GetMethod(
        
          "
        
        
          Concat
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (
        
          string
        
        ), 
        
          typeof
        
        (
        
          string
        
        
          ) }));

            MyILGenerator.Emit(OpCodes.Ldc_I4_S, 
        
        
          16
        
        
          );

            MyILGenerator.Emit(OpCodes.Call, 
        
        
          typeof
        
        (Convert).GetMethod(
        
          "
        
        
          ToByte
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (
        
          string
        
        ), 
        
          typeof
        
        
          (Int32) }));

            MyILGenerator.Emit(OpCodes.Stloc_2);

            MyILGenerator.Emit(OpCodes.Ldloc_1);

            MyILGenerator.Emit(OpCodes.Ldloc_3);

            MyILGenerator.Emit(OpCodes.Add);

            MyILGenerator.Emit(OpCodes.Stloc_1);

            
        
        
          //
        
        
          MyILGenerator.Emit(OpCodes.Br_S, endOfMethod);
        
        

            MyILGenerator.MarkLabel(jumpTable[
        
          3
        
        
          ]);

            MyILGenerator.Emit(OpCodes.Ldc_I4_2);

            MyILGenerator.Emit(OpCodes.Stloc_3);

            MyILGenerator.Emit(OpCodes.Ldstr, 
        
        
          "
        
        
          #FFFFFF
        
        
          "
        
        
          );

            MyILGenerator.Emit(OpCodes.Starg_S);
        
        
          //
        
        
          , "Hexadecimal");
        
        
                      MyILGenerator.Emit(OpCodes.Ldarg_0);

            MyILGenerator.Emit(OpCodes.Ldloc_1);

            MyILGenerator.Emit(OpCodes.Ldloc_3);

            MyILGenerator.Emit(OpCodes.Callvirt, 
        
        
          typeof
        
        (
        
          string
        
        ).GetMethod(
        
          "
        
        
          Substring
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (Int32), 
        
          typeof
        
        
          (Int32) }));



            MyILGenerator.Emit(OpCodes.Ldloc_0);

            MyILGenerator.Emit(OpCodes.Call, 
        
        
          typeof
        
        (
        
          string
        
        ).GetMethod(
        
          "
        
        
          Concat
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (
        
          string
        
        ), 
        
          typeof
        
        (
        
          string
        
        
          ) }));

            MyILGenerator.Emit(OpCodes.Ldc_I4_S, 
        
        
          16
        
        
          );

            MyILGenerator.Emit(OpCodes.Call, 
        
        
          typeof
        
        (Convert).GetMethod(
        
          "
        
        
          ToByte
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (
        
          string
        
        ), 
        
          typeof
        
        
          (Int32) }));

            MyILGenerator.Emit(OpCodes.Stloc_S, b2);

            MyILGenerator.Emit(OpCodes.Ldarg_0);

            MyILGenerator.Emit(OpCodes.Ldloc_1);

            MyILGenerator.Emit(OpCodes.Ldloc_3);

            MyILGenerator.Emit(OpCodes.Add);

            MyILGenerator.Emit(OpCodes.Dup);

            MyILGenerator.Emit(OpCodes.Stloc_1);

            MyILGenerator.Emit(OpCodes.Ldloc_3);

            MyILGenerator.Emit(OpCodes.Callvirt, 
        
        
          typeof
        
        (
        
          string
        
        ).GetMethod(
        
          "
        
        
          Substring
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (Int32), 
        
          typeof
        
        
          (Int32) }));

            MyILGenerator.Emit(OpCodes.Ldloc_0);

            MyILGenerator.Emit(OpCodes.Call, 
        
        
          typeof
        
        (
        
          string
        
        ).GetMethod(
        
          "
        
        
          Concat
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (
        
          string
        
        ), 
        
          typeof
        
        (
        
          string
        
        
          ) }));

            MyILGenerator.Emit(OpCodes.Ldc_I4_S, 
        
        
          16
        
        
          );

            MyILGenerator.Emit(OpCodes.Call, 
        
        
          typeof
        
        (Convert).GetMethod(
        
          "
        
        
          ToByte
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (
        
          string
        
        ), 
        
          typeof
        
        
          (Int32) }));

            MyILGenerator.Emit(OpCodes.Stloc_S, b3);

            MyILGenerator.Emit(OpCodes.Ldarg_0);

            MyILGenerator.Emit(OpCodes.Ldloc_1);

            MyILGenerator.Emit(OpCodes.Ldloc_3);

            MyILGenerator.Emit(OpCodes.Add);

            MyILGenerator.Emit(OpCodes.Ldloc_3);

            MyILGenerator.Emit(OpCodes.Callvirt, 
        
        
          typeof
        
        (
        
          string
        
        ).GetMethod(
        
          "
        
        
          Substring
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (Int32), 
        
          typeof
        
        
          (Int32) }));

            MyILGenerator.Emit(OpCodes.Ldloc_0);

            MyILGenerator.Emit(OpCodes.Call, 
        
        
          typeof
        
        (
        
          string
        
        ).GetMethod(
        
          "
        
        
          Concat
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (
        
          string
        
        ), 
        
          typeof
        
        (
        
          string
        
        
          ) }));

            MyILGenerator.Emit(OpCodes.Ldc_I4_S, 
        
        
          16
        
        
          );

            MyILGenerator.Emit(OpCodes.Call, 
        
        
          typeof
        
        (Convert).GetMethod(
        
          "
        
        
          ToByte
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (
        
          string
        
        ), 
        
          typeof
        
        
          (Int32) }));

            MyILGenerator.Emit(OpCodes.Stloc_S, b4);

            MyILGenerator.Emit(OpCodes.Ldloc_2);

            MyILGenerator.Emit(OpCodes.Stloc_S, b2);

            MyILGenerator.Emit(OpCodes.Stloc_S, b3);

            MyILGenerator.Emit(OpCodes.Stloc_S, b4);

            MyILGenerator.Emit(OpCodes.Call, 
        
        
          typeof
        
        (Color).GetMethod(
        
          "
        
        
          FromArgb
        
        
          "
        
        , 
        
          new
        
         Type[] { 
        
          typeof
        
        (Int32), 
        
          typeof
        
        (Int32), 
        
          typeof
        
        (Int32), 
        
          typeof
        
        
          (Int32) }));

            MyILGenerator.Emit(OpCodes.Stloc_S, color);

            MyILGenerator.Emit(OpCodes.Br_S, forLabel);

            MyILGenerator.MarkLabel(forLabel);

            MyILGenerator.Emit(OpCodes.Ldloc_S, color);

            MyILGenerator.Emit(OpCodes.Ret);

            typeBldr.CreateType();

            asmBuilder.Save(
        
        
          "
        
        
          Test.dll
        
        
          "
        
        );
        
          //
        
        
          方便反編譯 看代碼寫的對(duì)不對(duì)
        
        
          #endregion
        
        
          

        }

    }
        
      
    

?

      
        ?
      
    

ILGenerator.Emit動(dòng)態(tài) MSIL編程(二)之基礎(chǔ)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久国产精品ww | 亚洲日韩精品欧美一区二区 | 爱爱免费网址 | 欧美又粗又硬又大久久久 | 久久香蕉国产线看观看精品蕉 | 女人l8毛片a一级毛片免费 | 在线中文字幕日韩 | 欧美成人片在线 | 亚洲合集综合久久性色 | 欧美一区二区三区不卡片 | 久久综合九色综合97伊人麻豆 | 四虎最新视频 | 久久一 | 亚洲精品一区二区三区婷婷月 | 欧美人交性视频在线香蕉 | 亚洲图区欧美 | 精品一区二区久久久久久久网站 | 91精品国产亚一区二区三区 | 精品成人在线观看 | 亚洲欧洲国产经精品香蕉网 | 亚洲精品乱码久久久久久麻豆 | 热99热| 一级有奶水毛片免费看 | 欧美日韩国产高清 | 国产亚洲女人久久久久久 | 国产一区精品视频 | 国产成人免费午夜性视频 | 欧美综合图区亚洲综合图区 | 国产欧美二区三区 | 国内精品免费网站牛牛 | 5151四虎永久在线精品免费 | 欧美一级成人一区二区三区 | 精品哟哟国产在线观看 | 四虎澳门永久8848在线影院 | 国产伦久视频免费观看视频 | 四虎永久免费网站 | 夜夜爱夜夜操 | 久久毛片免费 | 亚洲欧美人成综合在线最新 | 日本不卡高清免费v | 国语精品91自产拍在线观看二区 |