トップ «前の日記(2006-05-26) 最新 次の日記(2006-05-29)» 編集

Route 477



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

超適当だが、なんか解凍できたっぽい。

ライブラリ化するとしたらどういうインターフェイスが良いだろうか。