نمایش نتایج 1 تا 2 از 2

نام تاپیک: تبدیل یک کد C++‎‎ به C#‎‎!(عربی ساز)

  1. #1
    کاربر دائمی آواتار moh_mov
    تاریخ عضویت
    دی 1388
    محل زندگی
    تهران
    سن
    33
    پست
    138

    تبدیل یک کد C++‎‎ به C#‎‎!(عربی ساز)

    سلام خدمت دوستان...
    من کدی دارم که به زبان ++C زده شده... می خوام ببرمش تو C#‎‎!کسی می تونه کمکم کنه؟
    کد مربوط به عربی سازه .... دوستان لطفا کمک کنند....
    اینم کد:
    void ArabicReverse(CString &s)
    {
    CString out, rev;
    s.MakeReverse();

    int i=0;
    while(i<s.GetLength())
    {
    if((s[i]>='0' && s[i]<='9')) // isDigit(s[i]) ?
    {
    rev.Empty();
    while((s[i]>='0' && s[i]<='9')) // isDigit(s[i]) ?
    {
    rev = rev + s[i];
    ++i;
    }
    rev.MakeReverse();
    out = out + rev;
    }
    else
    {
    out = out + s[i];
    ++i;
    }
    }
    s=out;
    }
    CString Arabize (LPCTSTR in)
    {
    static struct
    {
    WCHAR character;
    WCHAR endGlyph;
    WCHAR iniGlyph;
    WCHAR midGlyph;
    WCHAR isoGlyph;
    }a[N_DISTINCT_CHARACTERS]=
    {
    {0x630, 0xfeac, 0xfeab, 0xfeac, 0xfeab},
    {0x62f, 0xfeaa, 0xfea9, 0xfeaa, 0xfea9},
    {0x62c, 0xfe9e, 0xfe9f, 0xfea0, 0xfe9d},
    {0x62d, 0xfea2, 0xfea3, 0xfea4, 0xfea1},
    {0x62e, 0xfea6, 0xfea7, 0xfea8, 0xfea5},
    {0x647, 0xfeea, 0xfeeb, 0xfeec, 0xfee9},
    {0x639, 0xfeca, 0xfecb, 0xfecc, 0xfec9},
    {0x63a, 0xfece, 0xfecf, 0xfed0, 0xfecd},
    {0x641, 0xfed2, 0xfed3, 0xfed4, 0xfed1},
    {0x642, 0xfed6, 0xfed7, 0xfed8, 0xfed5},
    {0x62b, 0xfe9a, 0xfe9b, 0xfe9c, 0xfe99},
    {0x635, 0xfeba, 0xfebb, 0xfebc, 0xfeb9},
    {0x636, 0xfebe, 0xfebf, 0xfec0, 0xfebd},
    {0x637, 0xfec2, 0xfec3, 0xfec4, 0xfec1},
    {0x643, 0xfeda, 0xfedb, 0xfedc, 0xfed9},
    {0x645, 0xfee2, 0xfee3, 0xfee4, 0xfee1},
    {0x646, 0xfee6, 0xfee7, 0xfee8, 0xfee5},
    {0x62a, 0xfe96, 0xfe97, 0xfe98, 0xfe95},
    {0x627, 0xfe8e, 0xfe8d, 0xfe8e, 0xfe8d},
    {0x644, 0xfede, 0xfedf, 0xfee0, 0xfedd},
    {0x628, 0xfe90, 0xfe91, 0xfe92, 0xfe8f},
    {0x64a, 0xfef2, 0xfef3, 0xfef4, 0xfef1},
    {0x633, 0xfeb2, 0xfeb3, 0xfeb4, 0xfeb1},
    {0x634, 0xfeb6, 0xfeb7, 0xfeb8, 0xfeb5},
    {0x638, 0xfec6, 0xfec7, 0xfec8, 0xfec5},
    {0x632, 0xfeb0, 0xfeaf, 0xfeb0, 0xfeaf},
    {0x648, 0xfeee, 0xfeed, 0xfeee, 0xfeed},
    {0x629, 0xfe94, 0xfe93, 0xfe93, 0xfe93},
    {0x649, 0xfef0, 0xfeef, 0xfef0, 0xfeef},
    {0x631, 0xfeae, 0xfead, 0xfeae, 0xfead},
    {0x624, 0xfe86, 0xfe85, 0xfe86, 0xfe85},
    {0x621, 0xfe80, 0xfe80, 0xfe80, 0xfe7f},
    {0x626, 0xfe8a, 0xfe8b, 0xfe8c, 0xfe89},
    {0x623, 0xfe84, 0xfe83, 0xfe84, 0xfe83},
    {0x622, 0xfe82, 0xfe81, 0xfe82, 0xfe81},
    {0x625, 0xfe88, 0xfe87, 0xfe88, 0xfe87}
    };
    BOOL linkBefore, linkAfter;
    CString out;
    out=in;
    for(UINT i=0; i<_tcslen(in); i++)
    {
    WCHAR ch=in[i];
    if(((ch>=0x0621 && ch<=0x064a)) // is an Arabic character?
    {
    int idx = 0;
    while (idx < N_DISTINCT_CHARACTERS)
    {
    if (a[idx].character == in[i])
    break;
    ++idx;
    }

    if(i == _tcslen(in) - 1)
    linkAfter=0;
    else
    linkAfter = (isFromTheSet1(in[i+1]) ||
    isFromTheSet2(in[i+1]));
    if(i == 0)
    linkBefore=0;
    else
    linkBefore=isFromTheSet1(in[i-1]);

    if(linkBefore && linkAfter)
    out.SetAt(i, a[idx].midGlyph);
    if(linkBefore && !linkAfter)
    out.SetAt(i, a[idx].endGlyph);
    if(!linkBefore && linkAfter)
    out.SetAt(i, a[idx].iniGlyph);
    if(!linkBefore && !linkAfter)
    out.SetAt(i, a[idx].glyph);
    }
    }
    ArabicReverse (out);
    return out;
    }
    //////////////////////////////////////////////////////////////////////
    BOOL BzArabicRender::isFromTheSet1(WCHAR ch)
    {
    static WCHAR theSet1[22]={
    0x62c, 0x62d, 0x62e, 0x647, 0x639, 0x63a, 0x641, 0x642,
    0x62b, 0x635, 0x636, 0x637, 0x643, 0x645, 0x646, 0x62a,
    0x644, 0x628, 0x64a, 0x633, 0x634, 0x638};
    int i = 0;
    while (i < 22)
    {
    if(ch == theSet1[i])
    return TRUE;
    ++i;
    }
    return FALSE;
    }
    //////////////////////////////////////////////////////////////////////
    BOOL BzArabicRender::isFromTheSet2(WCHAR ch)
    {
    static WCHAR theSet2[12]={
    0x627, 0x623, 0x625, 0x622, 0x62f, 0x630, 0x631, 0x632,
    0x648, 0x624, 0x629, 0x649};
    int i = 0;
    while (i < 12)
    {
    if(ch == theSet2[i])
    return TRUE;
    ++i;
    }
    return FALSE;
    }
    //////////////////////////////////////////////////////////////////////

  2. #2

    نقل قول: تبدیل یک کد C++‎‎‎ به C#‎‎‎!(عربی ساز)

    توابع خود را به یک dll در ++Viusal C تبدیل کنید.
    سپس همانند استفاده کتابخانه های windows API آن ها را فراخوانی کنید.

    مثال ها و آموزش ها:
    http://www.barnamenevis.org/do...o=file&id=6823
    http://www.barnamenevis.org/sh...d.php?t=179243
    http://www.barnamenevis.org/sh...d.php?t=154101
    http://www.barnamenevis.org/sh...d.php?t=155100

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •