最近看到越來越多人所開發的軟體使用 .NET Framework,所以我也決定從頭開始學起。本來想要先摸 C# 的,但是之前看到有學弟在玩 Python 更是吸引我!在學弟的介紹下我開始摸 IronPython!他的由來我就不多說了,總之感覺微軟也想要挺 IronPython。所以只要 C# 辦的到的事情,我們都可以透過 IronPython 配合強大的 .NET Framework 來做到。不過執行架構在 .NET Framework 上的程式就一定要先安裝.NET Framework 2.0以上的版本才可以執行。IronPython 初體驗!我又寫了一個字串翻轉的程式來測試一下強大好用的 IronPython
Microsoft .NET Framework 2.0 可轉散發套件 (x86)下載
![](https://pic.pimg.tw/qazq/1199631370.png)
不過有一點是我覺得比較麻煩的,就是寫好的程式可以包成 .EXE 檔,但是一定要有 IronPython.dll、IronMath.dll 這兩個 DLL 檔案才可以執行,不知道有沒有方法可以將這些 DLL 也包在 EXE 檔裡面。現在就來說說 IronPython 和用 VC++ 寫的有什麼差吧。首先差最多的就是處理文字翻轉的部份了,因為 VC 還是用 Big5 來編碼,所以中文字的部份就很麻煩要一個 Byte 一個 Byte 處理,而在 IronPython 中,全部的編碼都是 uft-8 所以不管英文、中文都可以一併處理。
VC處理字串翻轉的 code:
IronPython 的 code(一行打完收工):
VC自動複製到剪貼簿的 code:
IronPython 的 code(也是一行打完收工):
所以今天的初體驗除了還沒有找到非常好用合適的 IDE 之外,其他都覺得還不賴,目標是可以將 C#、IronPython學好!其實 IronPython 熟了我想 CPython 應該也差不多了!總之,覺得這是未來很好用的程式語言,慢慢用的人會越來越多!替自己加油吧!
Microsoft .NET Framework 2.0 可轉散發套件 (x86)下載
![](https://pic.pimg.tw/qazq/1199631370.png)
不過有一點是我覺得比較麻煩的,就是寫好的程式可以包成 .EXE 檔,但是一定要有 IronPython.dll、IronMath.dll 這兩個 DLL 檔案才可以執行,不知道有沒有方法可以將這些 DLL 也包在 EXE 檔裡面。現在就來說說 IronPython 和用 VC++ 寫的有什麼差吧。首先差最多的就是處理文字翻轉的部份了,因為 VC 還是用 Big5 來編碼,所以中文字的部份就很麻煩要一個 Byte 一個 Byte 處理,而在 IronPython 中,全部的編碼都是 uft-8 所以不管英文、中文都可以一併處理。
VC處理字串翻轉的 code:
void CReverseStrDlg::ReverseStr(char *in, char *out)
{
int in_chi = 0;
int len = strlen(input);
for (int i = 0; i < len; i++)
{
char ch = in;
if (in_chi)
{
in_chi = 0;
out[i-1] = ch;
out = in[i-1];
}
else if (ch & 0x80)
in_chi = 1;
else
out = ch;
}
for (int i = len-1, j = 0; i >= 0; i--, j++)
{
in[j] = out;
}
strcpy(out, in);
}
{
int in_chi = 0;
int len = strlen(input);
for (int i = 0; i < len; i++)
{
char ch = in;
if (in_chi)
{
in_chi = 0;
out[i-1] = ch;
out = in[i-1];
}
else if (ch & 0x80)
in_chi = 1;
else
out = ch;
}
for (int i = len-1, j = 0; i >= 0; i--, j++)
{
in[j] = out;
}
strcpy(out, in);
}
IronPython 的 code(一行打完收工):
self._tbxOutput.Text = self._tbxInput.Text[::-1]
VC自動複製到剪貼簿的 code:
OpenClipboard();
EmptyClipboard();
HANDLE hmem = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, len + 1);
HANDLE hlocmem = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, sizeof(LCID));
if (hmem)
{
LPSTR buf = (LPSTR)GlobalLock(hmem);
PLCID lcid = (PLCID)GlobalLock(hlocmem);
memcpy(buf, output, len + 1);
// FIXME: Big5 should not be hard-coded since we have GB2312 version.
*lcid = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL), SORT_CHINESE_BIG5);
GlobalUnlock(hmem);
GlobalUnlock(hlocmem);
SetClipboardData(CF_TEXT, hmem);
SetClipboardData(CF_LOCALE, hlocmem);
}
CloseClipboard();
EmptyClipboard();
HANDLE hmem = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, len + 1);
HANDLE hlocmem = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, sizeof(LCID));
if (hmem)
{
LPSTR buf = (LPSTR)GlobalLock(hmem);
PLCID lcid = (PLCID)GlobalLock(hlocmem);
memcpy(buf, output, len + 1);
// FIXME: Big5 should not be hard-coded since we have GB2312 version.
*lcid = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL), SORT_CHINESE_BIG5);
GlobalUnlock(hmem);
GlobalUnlock(hlocmem);
SetClipboardData(CF_TEXT, hmem);
SetClipboardData(CF_LOCALE, hlocmem);
}
CloseClipboard();
IronPython 的 code(也是一行打完收工):
Clipboard.SetDataObject(self._tbxOutput.Text);
所以今天的初體驗除了還沒有找到非常好用合適的 IDE 之外,其他都覺得還不賴,目標是可以將 C#、IronPython學好!其實 IronPython 熟了我想 CPython 應該也差不多了!總之,覺得這是未來很好用的程式語言,慢慢用的人會越來越多!替自己加油吧!
全站熱搜