tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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


> よろしくお願いします。
何を? (^^;

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。