タイトル : Re^3: CreateObjectにてShell32を使用してZIPが展開されない。 投稿日 : 2008/12/01(Mon) 21:22 投稿者 : 魔界の仮面弁士
> CallByNameにて実装しようと思います。 ただし CallByName では、「ByRef」なメソッドを呼び出せない事に注意してください。 引数の内容が変化せずに、ByVal 相当の呼び出しになってしまいますので。 (今回の件では ByVal 専用でも困らないのかも知れませんけれどね) もしも ByRef / ByVal を指定した呼び出しを行いたいのであれば、 ・参照設定して、厳密な型を使って呼び出すようにする。 ・Guid 属性等を用いて、ActiveX のインターフェイス定義を自分で記述して利用。 ・リフレクションを使って呼び出すようにする。 などの対応が必要になります。 > また、FOF_NOCONFIRMATIONの指定において、 提示されたコードでは、そもそも、FOF_NOCONFIRMATION 定数の宣言が 書かれていないので、提示されたコードを確認するのが面倒でした…。 (こういう時は、定数定義も書いておいていただけるとありがたいです) > > 配布すべきは、参照設定によって自動生成される「Interop.Shell32.dll」の方ですよ。 > 別物だということに気付いていませんでした。 ちなみに次期バージョンである VB2010 では、参照設定した DLL 内の 型定義(のうち、使用されている部分)を EXE 内に取り込む機能があり、 こうした配布物を減らせるようになるのだとか。 > 今後の展開次第では、unzip32.dll や ziplibでは、 "ziplib" ではなく、"#ziplib" ですよ。 > ライセンスに違反する場合が出てくるのではと考え、 いっその事、展開機能を自力実装するとか… http://books.google.co.jp/books?vid=ISBN4797324287 というのは冗談として: "unzip32" はフリーソフトですが、商用目的なのでライセンス契約が必要となりますね。 "#ziplib" の方は GPL です。改変せずに、ライブラリとして使用する分には 商用利用も可能です。(改変する場合はソースコードの開示が必要) あとは、DotNetZip なんてのもありますね。こちらは Microsoft Public License です。 http://www.codeplex.com/DotNetZip その他には、J# の vjslib.dll を使う方法も有名ですね。 こちらの再配布には、"Microsoft Visual J#2.0 Redistributable Package" を使えば OK。 > shell32を使用することにいたしました。 それも一つの方法ですね。COM ベースである点と、今回のような問題に 気をつけていれれば大丈夫でしょう。LZH の解凍にも使えるかな? http://www.vector.co.jp/magazine/spotlight/050530/sl0505301.html .NET 標準の機能が良ければ、System.IO.Packaging.ZipPackage クラスなんてのも あるのですが……Open Package Conventions 形式の zip しか読み書きできないので、 今回の目的には適していないですね。 C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll http://msdn.microsoft.com/ja-jp/library/system.io.packaging.zippackage.aspx > よろしくお願いします。 何を? (^^; |