2006-05-28
■ [ruby] 統合アーカイバDLL
Rubyから圧縮ファイルの解凍をしたい場合、どうすればいいか。 unixならtarとかunzipとかを呼び出すのが良さそう。 じゃあ、windowsは?
ということで、Rubyから統合アーカイバDLLを呼び出すことを考えてみる。
試しにUNZIP32.DLL。
require 'Win32API' class ZIP def self.version Win32API.new('UNZIP32.DLL', 'UnZipGetVersion', 'v', 'i').call end def self.unpack #int WINAPI UnZip(const HWND hWnd,LPCSTR szCmdLine,LPSTR szOutput, const DWORD dwSize); func = Win32API.new('UNZIP32.DLL', 'UnZip', %w(p p p i), 'i') ret = "\0"*256 func.call(0, "z.zip", ret, 256) ret end end p ZIP.version p ZIP.unpack
超適当だが、なんか解凍できたっぽい。
ライブラリ化するとしたらどういうインターフェイスが良いだろうか。