【ハウツー】
IronPythonでは、Win32 APIを直接呼び出すことはサポートされていない(ActiveXやCOMライブラリを呼び出すサポートは存在する)。
一方CPythonの場合、Win32 APIを呼び出すには、以下に挙げるctypesライブラリとWindowsエクステンションライブラリをインストールすれば良い(それぞれ導入用実行ファイルが配布されている)。そこでここでは、cextライブラリを経由してctypes/Windowsエクステンションを呼び出すことで、IronPythonからWin32 APIを直接呼び出してみよう。
まずはwin32エクステンションから、MessageBeep関数とMessageBox関数を呼び出す(リスト3、画面4)。
# -*- coding:cp932 -*-
import clr
from System import *
from embedding import Import
sys = Import('sys')
sys.path.append('C:\\Python24\\Lib')
sys.path.append('C:\\Python24\\Lib\\site-packages')
win32gui = Import('win32gui')
print "MessageBeepを呼び出す"
Console.ReadKey()
win32gui.MessageBeep(0)
print "MessageBoxを呼び出す"
Console.ReadKey()
win32gui.MessageBox(0, "Hello IronPython", "test", 0)
![]() |
画面4: リスト3実行結果 |
次は、ctypesライブラリから、同じくMessageBeep関数とMessageBox関数を呼び出してみる(リスト4、画面5)。
# -*- coding:cp932 -*-
import clr
from System import *
from embedding import Import
sys = Import('sys')
sys.path.append('C:\\Python24\\Lib')
sys.path.append('C:\\Python24\\Lib\\site-packages')
ctypes = Import('ctypes')
print "MessageBeepを呼び出す"
Console.ReadKey()
ctypes.windll.user32.MessageBeep(0)
print "MessageBoxを呼び出す"
Console.ReadKey()
ctypes.windll.user32.MessageBoxW(0, "Hello IronPython", "test", 0)
![]() |
画面5:リスト4実行結果 |
ご覧の通り、cextライブラリを経由することで、Win32 APIを簡単に呼び出せることがわかる。
また、サンプルコードをそれぞれよく見てもらうとわかるが、キー入力判定に、.NET FrameworkのライブラリにあるConsole.ReadKey()メソッドを呼び出している。
という、Pythonの糊言語としての有用性を感じ取っていただけるだろう。
CPython Extensions for IronPythonライブラリにより、IronPythonは、CPythonの資産をほとんどそのまま継承できるようになったといえるだろう。面白いのは、
の2点が行えることだ。
ソフトウェア開発は、積み木細工のように例えられることがある。それは、今まで積み上げてきたコードや知識を基に、注意深く、慎重に、さらなる高み(それはモノであり知識である)を目指すことから想定されるのであろう。
「自身が持つソフトウェア資産を活用しつつ、新しい事に挑戦したい時、このようなライブラリを活用する方法もあるのだ」ということを知っていただけると幸いである。
| IronPython 1.0のリリース候補公開 - いまCodePlexが熱い [2006/7/26] |
| IronPython 1.0 - Pythonから.NETへアクセス [2006/9/7] |
| IronPythonを飼いならす - IronPythonの紹介とバージョン1.1の特徴 [2007/5/8] |
| IronPython 2.0 - .NET普及への新たな”カンブリア爆発”となるか? [2007/7/3] |
| 【レポート】マカフィーの世界の専門家の意識調査「サイバー防衛報告書」とセキュリティソリューション [21:15 5/25] |
| アップル、Aperture 3.2.4を公開 - バグ修正、安定性向上など [20:51 5/25] |
| 【レポート】GTC 2012 - VGXでエンタープライズ環境でのGPU需要開拓を狙うNVIDIA [20:07 5/25] |
| デル、期間限定キャンペーンに特価アイテム追加、アップグレード無料も継続 [19:41 5/25] |
| 上海問屋、iPhoneとほぼ同じ薄さのバッテリ内蔵ヘッドホンアンプ [19:05 5/25] |
|
[プリキュア]人気の秘密は王道と革新性 [09:00 5/26] ホビー |
|
[AKB48総選挙]次世代は「チーム4」に期待 注目メンバー紹介 [09:00 5/26] ホビー |
|
【レポート】「ザ・ビートル」発売直前! 歴史的名車・元祖ビートルの伝説をひも解く [09:00 5/26] ライフ |
|
【レポート】婚活パーティーはどんな感じなの? 潜入してみた!! [09:00 5/26] エンタメ |
|
【連載】鉄道トリビア 第152回 N700系普通車の座席は、同じ料金でも狭かったり広かったりする [08:00 5/26] ライフ |