fc2ブログ

7-zip32.dll Ver9.20.00.01

本家が久しぶりに正式版を出しましたのでその対応版です。
メジャーバージョンアップした割にはさほど内部での変更は無かったので対応も比較的楽に済みました。

本家の修正点以外でも幾つか機能の追加およびエンバグを修正してます。
まず、Unlha32.dllのUnlhaSetPriority()を参考にSevenSetPriority()でAPIを追加。
これでスレッドの優先度を指定できるようにしました。
しかしUnlha32.dllのそれとは違いスレッドの優先度を下げてもCPUはフル回転します。
ついでにSevenZipSetBackGroundMode()も実装しようかとも思いましたがこちらは結局手つかずのままにしてます。ここで言うバックグラウンドモードとは随分意味が違うような気がしましたので。
それからヘッダが暗号化された書庫の為にSevenZipSetDefaultPassword()関係を追加。
こちらはYz1.dllを参考にほぼ同等の機能を持ちます。但し7zの仕様の関係でSetDefaultPassword()は本来OpenArchive()系のAPIになりますが書庫に関連付け無くても使えるようになってます。
あとYz1.dllの場合パスワードを解除する際は""(空の文字列)を指定して解除する様ですが7zの場合空の文字列がパスワードにもなるのでここはNULLを指定する事で解除するように仕様変更。それに伴いNULLを指定してもSevenZipPasswordDialog()は呼び出しません。
コマンド説明書に書き忘れていましたが、これでグローバルなパスワードを設定してもSevenZip()での
コマンドには影響ありません。明示的に-pスイッチで指定しないと圧縮する際に暗号化しませんし解凍時パスワードを問い合わせます。

エンドユーザが使う分では経過ダイアログでの機能を本家の機能に合わせ追加してます。
それから内蔵SFXがPPMd解凍出来なくなってたのとパスワードミスった時にゴミが残るようになってたのも修正。

本家の更新分については沢山ありますが基本的には履歴を参考に。
注意として-sccスイッチは本家ではデフォルトはDOSですがWINに変更しています。
それから本家の更新履歴には載っていませんでしたがサロゲートペアユニコードに対応しているのと7z書庫でDeltaフィルタが追加されてます。
Deltaフィルタはwavファイルとかマルチメディアファイルを圧縮する際に威力発揮しそうですね。
あと本家の更新点で"The support for archives in installers was improved"と言うのが有ったのですがイマイチこれの意味が分からず。sfxがLZMA2に対応した事を意味してるんじゃないかと思うのですが・・・。仕方が無いのでこちらの履歴には直訳で書いてます。

開発中に7-zipの動作確認をしたところ、ソリッド書庫一部のファイルの更新を行うと他の全てのファイルの圧縮方式が変更されてしますがどうもバグっぽい。恐らく表示上の問題なだけだしもしかしたらテストの仕方が悪かったのかもしれないのでこれに関してはそのまま放置してます。


では、以下今回の更新点の詳細です。
・APIの追加。(SevenSetPriority)
・APIの追加。(SevenZipSet/GetDefaultPassword, SevenZipPasswordDialog)
・SevenZipOpenArchive で M_ERROR_MESSAGE_ON フラグのサポート。
・処理状況ダイアログの詳細情報に経過時間と処理速度の項目追加。
・暗号化書庫解凍の際パスワードが間違ってた場合ゴミが残らないよう再修正。
解凍中止時に残るゴミは間違って別のファイルを消しかねないので残します。
・内蔵 SFX で PPMd 方式が未対応になってたのを修正。
・7-Zip 9.20 にてリビルド。
- 7z 書庫で LZMA2 圧縮方式をサポート。
- 7z ソリッド書庫の更新をサポート。
- zip 書庫で PPMd 圧縮方式をサポート。
- インストーラにて書庫のサポートを改善。
- zip 書庫に NTFS ファイルタイムスタンプを格納します。
- PPMd コーデックの速度最適化。
- Intel 32nm CPU にて AES コードの速度最適化。
- Intel Atom CPU にて CRC 計算コードの速度最適化。
- -scc スイッチで入出力の文字コードを指定可能。(デフォルトは WIN )
- -scrc スイッチで解凍、テスト時に合計 CRC-32 を計算します。
- ZIP 書庫を作成する際、ディスクの断片化が起きる問題を修正。
- 幾つかのバグを修正。

- サロゲートペアユニコード対応。
- 7z 書庫で Delta フィルタをサポート。

コメントの投稿

非公開コメント

こんにちは。更新お疲れさまです。

> The support for archives in installers was improved
更新履歴などをちゃんと見たわけではないので正しいかどうか分かりませんが、これはおそらくNSISやSFXなど、実行ファイルの末尾に書庫が付加されていることを検出する部分を改良した、ということではないかと思います。
7-zip 9.06βでPEのセクションを解析して表示できる機能が実装されましたが、これ以降しばらく、SFXを開こうとした際にSFXとして判定されずにPEとしてリソースを表示するようになってしまい、使い勝手が悪くなったということがあったので、それに対する改善を行った、ということのように思います。

あと余談ですが、このコメントフォームをFirefox(@Linux)から見ると、本文を入力する部分のtextareaが横に間延びしていて、はみ出た部分が見えなくなってしまうので結構書き辛いです(コメント投稿確認の画面ではちゃんと見れるのですが、デザインを変更している関係で見えなくなってしまったのだと思います)。
もし時間がありましたら修正していただきたく思います。

では。

FindFirst/Next with SetUnicodeMode

お世話になっております。

7-zip32.dll Ver9.20.00.01 にて
SevenZipSetUnicodeMode( TRUE ) しても SevenZipFindFirst()/Next() で
ファイル名が ShiftJIS で返って来るようになりました。
----------------------------------------------
CStdOutStream::SetUnicodeMode(BOOL bUnicode)
{
 m_bUnicode = bUnicode;
}
COpenArchive::FindNext()
{
 g_StdOut.WideCharToMultiByte();
}
----------------------------------------------
…なので、
----------------------------------------------
CStdOutStream::WideCharToMultiByte()
{
 if (m_bUnicode) // 以前
   ↓
 if (codePage == CP_UTF8) // v9.20
}
----------------------------------------------
この辺の変更が原因かな…と。
以前と同じ動作となるよう変更をお願い出来ますでしょうか?

以上、よろしくお願い致します。

>Silky さん
なるほど、そういう経緯が有りましたか。
今度その辺をの変更のソースをじっくり調べてみます。
フォームのに関してはWindowsのFirefoxでもきちんと表示されて無いですね。
テンプレート変えた方がよさげですね。

>AKTさん
その通りでした。
早速修正しましたのでこちらを宜しくお願いします。

早速のご対応ありがとうございました。szo
月別アーカイブ
カテゴリー
リンク
ブログ内検索
RSSフィード