« クロスフェードが重いのは・・・ | メイン | Pythonのライセンス »
2005年02月11日
ツール開発メモ:: SWIGを使ってみる (Perlでゴミ箱へ)
Tweet @jin1016をフォローperlでいきなりファイルを削除せずにゴミ箱へ移すために、ゴミ箱へ削除するためのperlモジュールを作ることにした。
で、以前知ったSWIGを使ってみることにした。
マニュアルとサンプルを見てとにかく書いてみる。
まずは、ゴミ箱へ削除する関数を書く。
ファイル名はtoTrashBox.cppとした。
#include <windows.h> extern "C" void toTrashBox( const char *p ) size_t len = strlen(p); memset( &stFile, 0, sizeof(SHFILEOPSTRUCT) ); |
パスは\0\0で区切らないとならないため、内部でコピーして\0を足している。
後、渡すパスはフルパスでないといけない。
他はたいしたことはやっていない。
次にSWIGスクリプト(?)をW32Shell.iという名前で作る。
中身は次の通り。
/* File : W32Shell.i */ extern void toTrashBox( const char *p ); |
で、コマンドラインでSWIGに渡す。
> swig -perl W32Shell.i |
すると、W32Shell_wrap.c と W32Shell.pm が出来る。
次に、W32Shell 用のプロジェクトを作る。
DLLのプロジェクトとして作り、中身は空にする。
C/C++の追加インクルードディレクトリに"C:\Perl\lib\CORE"を追加。
リンカの追加の依存ファイルに"C:\Perl\lib\CORE\perl58.lib"を追加。
これはインストール環境やperlのバージョンによって変わるので、適宜あわせる。
で、プロジェクトにW32Shell_wrap.c と toTrashBox.cpp を追加。
後はビルドすればOK。
W32Shell.dllが出来る。
で、実際に使う場合のperlスクリプトは次のようにする。
use W32Shell; |
これで、C:\test.txt がゴミ箱へ移動される。
もしかしたら需要があるかもしれないので、その内このモジュールは公開するかも。
気ままにメソッドを追加しそうだけど。
と言っても、そんなに使いたい物はないかな?
まあ、欲しくなったときに追加していこう。
投稿者 Takenori : 2005年02月11日 00:32
comments powered by Disqus