How to Create & Use DLL File in C# ?

Posted by ေတဇာလင္း Saturday, 17 December 2016 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Microsoft Visual Studion C# ကိုအသံုးျပဳၿပီးေတာ့ DLL File တစ္ခုကို ဘရ္လို ဖန္တီးယူႏိုင္မလဲ၊ ဘရ္လိုျပန္လည္ၿပီး ေခၚယူ အသံုးျပဳႏိုင္မလဲ ဆိုတာနဲ႔ ပတ္သတ္ၿပီး ေဆြးေႏြးေပးသြားပါ့မရ္။ Dll ဆိုတာကေတာ့ Dynamic Link Library ရဲ႔ အတိုေကာက္ စကားလံုးျဖစ္ပါတရ္။ Library File ဆိုတာနဲ႔တင္ ကုဒ္တင္းကို တီးမိေခါက္မိ သူေတြအေနနဲ႔ေတာ့ အသံုးခ်ႏိုင္မႈနဲ႔ စြမ္းေဆာင္ရည္ကို သိေနေလာက္ၿပီလို႔ ထင္ပါတရ္။
က်ေနာ္ အနည္းငရ္ေျပာရရင္ Dll ဆိုတာ Programming Language အသီးသီးအတြက္ IDE နဲ႔ Writer အၾကား Coding Flow ကုိ Convert လုပ္ေပးႏိုင္တဲ့ File တစ္ခုပါ။ အက်ိဳးသက္ေရာက္မႈကေတာ့ ေျပာမျပႏိုင္ေလာက္ေအာင္ပါပဲ။ က်ေနာ္တို႔ VS မွာ C# ကို အသံုးျပဳၿပီး Project တစ္ခုေရးမရ္ဆိုပါစို႔။ အေျခခံ အက်ဆံုး Text ေတြ၊ Label ေတြ၊ Button ေတြ အစရွိတဲ့ Tools ေတြကို က်ေနာ္တို႔ မျဖစ္မေနကို အသံုးျပဳ ရမွာပါ။ က်ေနာ္တို႔ ဒီလို အသံုးျပဳႏိုင္ဖုိ႔ IDE Creater ေတြက အမ်ိဳးမ်ိဳးေသာ Functions ေတြအတြက္ Library File ေတြကို ထည့္သြင္း ေပးထားရပါတရ္။ ဒါမွသာ Writer ေတြအတြက္ မဆင္ေျပမရ္မဟုတ္လားဗ်။ ဥပမာ ေျပာရရင္ က်ေနာ္တို႔ Form အစရွိတဲ့ Text, Label, Button ေတြ အသံုးျပဳႏိုင္ဖို႔အတြက္ using System.Windows.Forms; ဆိုတဲ့ Library dll file အသံုးျပဳေပးရပါတရ္။ Graphic သမားေတြအတြက္ Line, Circle, Shape,... အစရွိတဲ့ ဖန္တီးမႈေတြ လုပ္ေဆာင္ႏိုင္ဖို႔အတြက္ using System.Drawing.Drawing2D; ဆိုတဲ့ Library File ကိုအသံုးျပဳရပါတရ္။ ဒီလိုပါပဲ။ မိတ္ေဆြတို႔အေနနဲ႔ File and Directory ေတြကို Read, Write, Create,... စတာေတြ လုပ္ခ်င္ပါသလား။ using System.IO; ဆိုတဲ့ Library File ကိုအသံုးျပဳရပါတရ္။ အျခားလည္း အမ်ားႀကီးပါပဲဗ်ာ။ က်ေနာ္ ဒီေလာက္ပဲ ေျပာပါရေစ။
ဒီမွာ က်ေနာ္အေနနဲ႔ သိေစခ်င္တာက Library File ကိုအသံုးျပဳျခင္းျဖင့္ Writer သို႔မဟုတ္ Programmer တစ္ေယာက္အေနနဲ႔ Coding ကို အေသးစိတ္ စဥ္းစားစရာမလို၊ ကိုယ္တိုင္ဖန္တီး စရာမလို၊ ထပ္ခါတလဲလဲ ေရးေနစရာမလိုပဲ မိမိစိတ္ကူးကို အခ်ိန္တိုအတြင္းမွာ ဖန္တီးယူႏိုင္တရ္ဆိုတာပါပဲဗ်ာ။ ဒါဆို ဒီေလာက္ အက်ိဳးသက္ေရာက္မႈ အားေကာင္းတဲ့ library file ကို ကိုယ္တိုင္ေရာ ဖန္တီးယူလို႔ မရႏိုင္ဘူးလားလို႔ ေမးစရာရွိလာပါတရ္။ က်ေနာ္အေနနဲ႔ ေျပာရရင္ Programming Language တိုင္းအတြက္ ရပါတရ္ဗ်ာ။ ဒီေလ့က်င့္ခန္းမွာေတာ့ က်ေနာ္ VS C# ကိုအသံုးျပဳၿပီး 0 to 9 Number ေတြကို ျမန္မာကေနအဂၤလိပ္၊ အဂၤလိပ္ကေနျမန္မာ သို႔ ေျပာင္းလဲႏိုင္ဖို႔အတြက္ Dll file ဖန္တီးၿပီး ျပန္လည္အသံုးခ် ႏိုင္တာေလးကို ေဆြးေႏြး ေပးသြားပါ့မရ္။ စိတ္၀င္စားတဲ့ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမမ်ားအားလံုး က်ေနာ္နဲ႔အတူ ေလ့လာၾကည့္ၾက အံုးစို႔ဗ်ာ။

အားလံုးအဆင္ေျပ ေခ်ာေမြ႕နိုင္ၾကပါေစ။

မုန္တိုင္းလည္းစဲ... လမင္းလည္းသာ

Posted by ေတဇာလင္း Thursday, 15 December 2016 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး မဂၤလာပါဗ်ာ။ စာေတြလည္း မတင္ျဖစ္တာ ၾကာၿပီဗ်ိဳ႕။ စိတ္မပါတာေရာ၊ မအားမလပ္တာေရာေပါ့ဗ်ာ။ ဒီေန႔ေတာ့ တင္ေနၾက ပံုစံမဟုတ္ပဲ အဆဲခံထိ(ျပည့္သူ႔ေမတၱာခံယူ)လိုက္အံုးမရ္။ က်ေနာ္ 2013-2014 ေလာက္က ၀တၱဳတိုေလးတစ္ပုဒ္ ေရးမိထားတာရွိတရ္ဗ်။ ဒါေလး တင္လိုက္မရ္ဗ်ာ။ မိတ္ေဆြတို႔ ဖတ္ရႈေပးၿပီး ေ၀ဖန္ေပးၾကပါအံုး။

အားလံုးအဆင္ေျပ ေခ်ာေမြ႕နိုင္ၾကပါေစ။

Create Hexadecimal to Binary Converter in C#

Posted by ေတဇာလင္း Saturday, 12 November 2016 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ က်ေနာ္တို႔ရဲ႕ မၿပီးျပတ္ေသးတဲ့ Number System အေၾကာင္းေလးကို ေရွ႕ဆက္ၾကည့္ၾကရေအာင္ပါ။ ဒီေန႔ေတာ့ Hexadecimal Number တစ္ခုကို Binary Number အျဖစ္ ဘရ္လိုေျပာင္းလဲ ယူႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာ ျဖစ္ပါတရ္။ မိတ္ေဆြတို႔ ပိုၿပီးနားလည္သြားေအာင္ က်ေနာ္ Hexadecimal ကေန Binary ေျပာင္းတာကို ေအာက္မွာ ဥပမာေလးနဲ႔ အရင္ျပပါ့မရ္။
 eg. Hex = 1AD, Binary =? 
          so, Hex  = 1        A      D   
                       = 0001 1010 1101   
                       = 000110101101<2> 
Hex(1AD) = Binary(000110101101)

အနည္းငယ္ရွင္းရမရ္ဆိုရင္ေတာ... Hexadecimal ကေန Binary ေျပာင္းလဲယူမရ္ဆိုရင္ျဖင့္ ပထမဆံုး Hex Number ေတြကို တစ္လံုးခ်င္းဆီ အရင္ခြဲယူပါတရ္။ ရလာတဲ့ Hex Number တစ္လံုးခ်င္းစီကိုမွ Binary Conversion Table နဲ႔ တိုက္ဆိုင္စစ္ေဆးပါတရ္။ ေနာက္ဆံုး ရလာတဲ့ တန္ဖိုးအသီးသီးကို ျပန္ေပါင္းေပးျခင္းျဖင့္ က်ေနာ္တို႔ လိုအပ္ေနတဲ့ Binary Number တစ္ခုကို ဆြဲထုတ္ယူလိုက္တာပဲျဖစ္ပါတရ္ဗ်။ နားလည္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။
ကဲ... အခုဆိုရင္ က်ေနာ္တို႔ Logic အေတြးကိုလည္း နားလည္သြားၿပီဆိုေတာ့ Coding Flow ေလးကို ဆက္ေလ့လာၾကည့္ၾကမရ္။
  1. ပထမဦးဆံုး မိတ္ေဆြတို႔ရိုက္ထည့္လိုက္တဲ့ Hexadecimal Number ကို ToCharArray() Method အားအသံုးျပဳၿပီး HexArr ဆိုတဲ့ Char Array တစ္ခုအျဖင့္ ဖန္တီးယူလိုက္ပါတရ္။
  2. ဒုတိယအေနနဲ႔ while()loop ကိုအသံုးျပဳၿပီး count ကို 1 တိုးေပးၿပီး HexArr ဆံုးသည္အထိ loop ပတ္ပါတရ္။
  3. Loop အတြင္းမွာေတာ့ Switch( )statement ကိုအသံုးျပဳၿပီး HexArr[index] ကို key အျဖစ္သံုးကာ ၄င္းနဲ႔သက္ဆိုင္တဲ့ Binary တန္ဖိုးေတြကို ဆြဲထုတ္ပါတရ္။
  4. ေဒီနည္းအတိုင္းပဲ loop ဆံုးသည္အထိ သြားၿပီး loop တခါပတ္တိုင္းရရွိလာတဲ့ Binary တန္းဖိုးေတြကို ေပါင္းေပးျခင္းျဖင့္ က်ေနာ္တို႔ လိုခ်င္ေနတဲ့ Binary တန္ဖိုးကိုရရွိမွာ ျဖစ္ပါတရ္ဗ်ာ
ဒီ Conversion ေလးရဲ႕ GUI ကိုေတာ့ ေအာက္ပါအတိုင္း ခ်ထားပါတရ္ဗ်။ မိတ္ေဆြတို႔အေနနဲ႔ ႀကိဳက္ႏွစ္သတ္ရာ ပံုစံ Tool ေတြနဲ႔ ဖန္တီးယူႏိုင္ပါတရ္။
ပိုၿပီး နားလည္သြားေအာင္ Coding အျပည့္အစံုေလးကို ေအာက္မွာ ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
using System;
using System.Windows.Forms;

namespace Converter
{
    public partial class HexToBinary : Form
    {
        public HexToBinary()
        {
            InitializeComponent();
        }

        public string HexadecimalToBinary(string hex)
        {
            string Bi = "";
            string Binary = "";
            int i = 0;
            char[] HexArr = hex.ToCharArray();
            while (HexArr.Length > i)
            {
                switch (HexArr[i])
                {
                    case '0': Bi = "0000"; break;
                    case '1': Bi = "0001"; break;
                    case '2': Bi = "0010"; break;
                    case '3': Bi = "0011"; break;
                    case '4': Bi = "0100"; break;
                    case '5': Bi = "0101"; break;
                    case '6': Bi = "0110"; break;
                    case '7': Bi = "0111"; break;
                    case '8': Bi = "1000"; break;
                    case '9': Bi = "1001"; break;
                    case 'A': Bi = "1010"; break;
                    case 'B': Bi = "1011"; break;
                    case 'C': Bi = "1100"; break;
                    case 'D': Bi = "1101"; break;
                    case 'E': Bi = "1110"; break;
                    case 'F': Bi = "1111"; break;
                    default: Bi = ""; break;
                }
                Binary += Bi +" ";
                i++;
            }
            return Binary;
        }

        private void btnConvert_Click(object sender, EventArgs e)
        {
            txtBinary.Text = HexadecimalToBinary(txtHexadecimal.Text.ToUpper()).ToString();       
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            txtHexadecimal.Clear();
            txtBinary.Clear();
            txtHexadecimal.Focus();
        }
    }
}
အေသးစိတ္နားလည္ႏိုင္ဖို႔အတြက္ က်ေနာ္ Trace လုိက္ျပပါ့မရ္။
Hex = 1AD, Binary=? 
char[] HexArr = { '1', 'A', 'D'};   
i = 0; 
Loop1 => while(HexArr.Length >0) =>    
               while(3 > 0) => true   
                    switch(HexArr[i]) => 
                    switch(HexArr[0]) => case '1': Bi = "0001"; break;  
                         so, Bi = 0001   
                         i++;   

i = 1; 
Loop2 => while(3 > 1) => true   
                     switch(HexArr[1]) => case 'A': Bi = "1010"; break;  
                          so, Bi = 1010   
                          i++;   

i = 2; 
Loop3 => while(3 > 2) => true   
             switch(HexArr[2]) => case 'D': Bi = "1101"; break;  
         so, Bi = 1101   
         i++;   

i = 3; 
Loop4 => while(3 > 3) => false 
so, Binary = Loop1 Loop2 Loop3 = 0001 1010 1101

ရွင္းလင္းခ်က္နဲ႔ Screen Shoot ေလးေတြကို ၾကည့္လိုက္ရင္ေတာ့ နားလည္သြားၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမတို႔အေနနဲ႔ Hexadecimal Number တစ္ခုကေနၿပီး Decimal Number တစ္ခုသို႔ ဘယ္လို ေျပာင္းလဲယူႏိုင္မလဲဆိုတာကို နားလည္သြားၾကမရ္လို႔ ထင္ပါတရ္ဗ်ာ။ စတင္ေလ့လာသူမ်ားအတြက္သာ ရည္ရြယ္လို႔ တင္ျပပံု မွားယြင္းတာ၊ အဓိပၸါယ္ ကြဲလြဲေဖာ္ျပမိတာရွိခဲ့ရင္ နားလည္ေပးၾကဖို႔ ေတာင္းပန္ပါတရ္ဗ်။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။

Create Hexadecimal to Decimal Converter in C#

Posted by ေတဇာလင္း Monday, 7 November 2016 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ က်ေနာ္တို႔ရဲ႕ မၿပီးျပတ္ေသးတဲ့ Number System အေၾကာင္းေလးကို ေရွ႕ဆက္ၾကည့္ၾကရေအာင္ပါ။ ဒီေန႔ေတာ့ Hexadecimal Number တစ္ခုကို Decimal Number အျဖစ္ ဘရ္လိုေျပာင္းလဲ ယူႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။ မိတ္ေဆြတို႔ ပိုၿပီးနားလည္သြားေအာင္ က်ေနာ္ Hexadecimal ကေန Decimal ေျပာင္းတာကို ေအာက္မွာ ဥပမာေလးနဲ႔ အရင္ျပပါ့မရ္။
eg. Hex = 1AD, Dec =?
so, Hex   = (1 x 16(2)) +  (10 x 16(1)) + (13 x 16(0))
          = 256         +    160        +    13  
          = 429<10>
Hex(1AD)  = Dec(429)

အနည္းငယ္ရွင္းရမရ္ဆိုရင္ေတာ... Hexadecimal ကေန Decimal ေျပာင္းမွာျဖစ္တဲ့အတြက္ ကိန္းစဥ္တန္းရဲ႕ ေနရာလိုက္တန္ဖိုးအတိုင္း Power တင္ၿပီး 16 နဲ႔ ေျမွာက္ယူပါတရ္။ ရလာတဲ့ တန္ဖိုးအသီးသီးကို ျပန္ေပါင္းေပးျခင္း ျဖင့္ က်ေနာ္တို႔ လိုအပ္ေနတဲ့ Decimal Number တစ္ခုကို ဆြဲထုတ္ယူလိုက္တာပဲျဖစ္ပါတရ္ဗ်။ နားလည္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။
ကဲ... အခုဆိုရင္ က်ေနာ္တို႔ Logic အေတြးကိုလည္း နားလည္သြားၿပီဆိုေတာ့ Coding Flow ေလးကို ဆက္ေလ့လာၾကည့္ၾကမရ္။
  1. ပထမဦးဆံုး မိတ္ေဆြတို႔ရိုက္ထည့္လိုက္တဲ့ Hexadecimal Number ကို ToCharArray() Method အားအသံုးျပဳၿပီး HexArr ဆိုတဲ့ Char Array တစ္ခုအျဖင့္ ဖန္တီးယူလိုက္ပါတရ္။
  2. ဒုတိယအေနနဲ႔ ၄င္းရရွိလာတဲ့ Hex Char Array ကို တိုက္ဆိုင္စစ္ေဆးဖို႔အတြက္ HexDigit 16 သာ ပါရွိတဲ့ HexDigits Array တစ္ခုကို ႀကိဳတင္ ဖန္တီးထားလိုက္ပါတရ္။
  3. ေနာက္တစ္ဆင့္မွာေတာ့ for( )loop ကိုအသံုးျပဳၿပီး HexArr ကိုေရာ HexDigits ကိုေရာ loop ဆံုးသည္အထိ ပတ္ပါတရ္။
  4. ေနာက္တစ္ဆင့္မွာေတာ့ loop အတြင္းမွာ HexArr ထဲက Item နဲ႔ HexDigits ထဲက Item ကို တူမတူ if( ) statement နဲ႔ တိုက္ဆိုင္ စစ္ေဆးပါတရ္။
  5. တူညီတဲ့ Item ေတြၿပီဆိုရင္ေတာ့ Dec += (int)(j * Math.Pow(16, power)); formula ကိုအသံုးျပဳၿပီး Decimal တန္ဖိုးတစ္ခုကို ဆြဲထုတ္ယူပါတရ္။
  6. ဒီနည္းအတိုင္းပဲ loop ဆံုးသည္အထိ သြားၿပီး loop တခါပတ္တိုင္းရရွိလာတဲ့ Decimal တန္းဖိုးေတြကို ေပါင္းေပးျခင္းျဖင့္ က်ေနာ္တို႔ လိုခ်င္ေနတဲ့ Decimal တန္ဖိုးကိုရရွိမွာျဖစ္ပါတရ္ဗ်ာ။
ဒီ Conversion ေလးရဲ႕ GUI ကိုေတာ့ ေအာက္ပါအတိုင္း ခ်ထားပါတရ္ဗ်။ မိတ္ေဆြတို႔အေနနဲ႔ ႀကိဳက္ႏွစ္သတ္ရာ ပံုစံ Tool ေတြနဲ႔ ဖန္တီးယူႏိုင္ပါတရ္။
ပိုၿပီး နားလည္သြားေအာင္ Coding အျပည့္အစံုေလးကို ေအာက္မွာ ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
using System;
using System.Windows.Forms;

namespace NumberTypeConverter
{
    public partial class HexadecimalConversion : Form
    {
        public HexadecimalConversion()
        {
            InitializeComponent();
        }

        public long HexToDecimal(string hex)
        {
            long Dec = 0;
            int power = 0;
            char[] HexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
'A', 'B', 'C', 'D', 'E', 'F'};
            char[] HexArr = hex.ToCharArray();
            for (int i = HexArr.Length-1; i >=0; i--)
            {
                for (int j = 0; j < HexDigits.Length-1; j++)
                {
                    if (HexArr[i] == HexDigits[j])
                    {
                        Dec += (int)(j * Math.Pow(16, power));
                    }
                }
                power++;
            }
            return Dec;
        }

        private void btnConvert_Click(object sender, EventArgs e)
        {
            txtDecimal.Text = HexToDecimal(txtHexadecimal.Text.ToUpper()).ToString();
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            txtDecimal.Clear();
            txtHexadecimal.Clear();
            txtHexadecimal.Focus();
        }
    }
} 
အေသးစိတ္နားလည္ႏိုင္ဖို႔အတြက္ က်ေနာ္ Trace လုိက္ျပပါ့မရ္။
Hex = 1AD, Dec=?
char[] HexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
'A', 'B', 'C', 'D', 'E', 'F'};
char[] HexArr = { '1', 'A', 'D'};

Loop1 =>  for (int i = HexArr.Length-1; i >=0; i--) =>
          for (int i = 2; i >=0; i--) => true
           for (int j = 0; j < HexDigits.Length-1; j++) => 
           for (int j = 0; j < 15; j++) => true
      if (HexArr[i] == HexDigits[j]) => 
             if (HexArr[2] == HexDigits[13]) => true
  Dec = (int)(13 * Math.Pow(16, 0)); => 13

Loop2 =>  for (int i = 1; i >=0; i--) => true
    for (int j = 0; j < 15; j++) => true
      if (HexArr[1] == HexDigits[10]) => true
  Dec = (int)(10 * Math.Pow(16, 1)); => 160 

Loop3 =>  for (int i = 0; i >=0; i--) => true
    for (int j = 0; j < 15; j++) => true
      if (HexArr[0] == HexDigits[1]) => true
  Dec += (int)(1 * Math.Pow(16, 2)); => 256 
Loop4 =>  for (int i = -1; i >=0; i--) => false
so, Dec = Loop1 + Loop2 + Loop3 = 13 + 160 + 156 = 429


ရွင္းလင္းခ်က္နဲ႔ Screen Shoot ေလးေတြကို ၾကည့္လိုက္ရင္ေတာ့ နားလည္သြားၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမတို႔အေနနဲ႔ Hexadecimal Number တစ္ခုကေနၿပီး Decimal Number တစ္ခုသို႔ ဘယ္လို ေျပာင္းလဲယူႏိုင္မလဲဆိုတာကို နားလည္သြားၾကမရ္လို႔ ထင္ပါတရ္ဗ်ာ။ စတင္ေလ့လာသူမ်ားအတြက္သာ ရည္ရြယ္လို႔ တင္ျပပံု မွားယြင္းတာ၊ အဓိပၸါယ္ ကြဲလြဲေဖာ္ျပမိတာရွိခဲ့ရင္ နားလည္ေပးၾကဖို႔ ေတာင္းပန္ပါတရ္ဗ်။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။