サポート掲示板
HOME  □ MANUAL  □ 新着記事  □ 新規投稿
ツリー表示  □ 記事全文表示  □ SEARCH  □ 過去ログ
親記事5件分を全文表示
1223/ vb6.0作成したexeの場合、コールバックが走っていない
・投稿者/ li -(2021/01/23(Sat) 21:51:55)
・URL/

    【ソフト名】
     解凍ツールを勉強する
    【バージョン】
     922002
    【使用OS】
     Win7 Pro
    【開発言語】
     VB6.0
    【PC機種】
     Dell
    【質問内容】
     お世話になっております。liです。
    7-zip32.dllをご利用させていただきます。ありがとうございます。 
    こちらが外国人で、日本語が下手です、申し訳ございません。
     
    こちらは、指定のzipファイルをCドライブに解凍し、解凍状況を表示するようにWinFormsを作成したいです。
    解凍処理は、下記の2個APIを利用します、
     ・SevenZipSetOwnerWindowExでコールバック関数を指定する
     ・SevenZipでコマンド(-hide付いた)を実行する
     ・コールバック関数で、lpEis.exinfo.szSourceFileNameから解凍状況を受け取る

    問題:
    debugの場合、zipファイルが解凍できて、解凍状況が受け取ることができます。⇒OK
    実行ファイル(.exe)の場合、zipファイルが解凍できなく、解凍状況が受け取ることができません、エラーもないです。
    ただ、SevenZipSetOwnerWindowExをコメントしたら、zipファイルが解凍できます。

    ご指導、ご教授を宜しくお願い致します。




1224/ Re[1]: vb6.0作成したexeの場合、コールバックが走っていない
・投稿者/ Akky
・投稿日/ 2021/01/24(Sun) 23:40:59
・URL/

    その情報だけで原因を判別するのは難しいですが
    SevenZipSetOwnerWindowExで指定した_lpArcProc内の変数(EXTRACTINGINFOEX)が
    正常に初期化されてないのが原因ではないかと思います。

1229/ Re[2]: vb6.0作成したexeの場合、コールバックが走っていない
・投稿者/ li
・投稿日/ 2021/02/02(Tue) 11:43:32
・URL/

    >原因はコールバック関数で、StrConvを利用したので、異常が発生したと分かりました。
    >StrConv(lpEis.exinfo.szSourceFileName, vbUnicode)
    解凍状況が文字化けなので、StrConvで文字コードをunicodeに変換します。
    デバッグ時、解凍状況が表示できます。
    実行ファイル(.exe)の場合、"cannot allocate required memory"のメッセージが表示されました。ただ、StrConvを使わないと、解凍状況が表示できます。

    このメッセージが7zip32.dllから出しますか?何かの原因でしょうか?

1227/ Re[2]: vb6.0作成したexeの場合、コールバックが走っていない
・投稿者/ li
・投稿日/ 2021/01/25(Mon) 16:57:28
・URL/

    原因はコールバック関数で、StrConvを利用したので、異常が発生したと分かりました。
    StrConv(lpEis.exinfo.szSourceFileName, vbUnicode)

    もう一つ問題ですが、コールバック関数の引数(nState)の値が0/1/2の意味が難でしょうか?

1228/ Re[3]: vb6.0作成したexeの場合、コールバックが走っていない
・投稿者/ Akky
・投稿日/ 2021/01/26(Tue) 01:50:46
・URL/

    >もう一つ問題ですが、コールバック関数の引数(nState)の値が0/1/2の意味が難でしょうか?
    これです。

    --------------------------------------------------------------------------------
    処理の流れ
    --------------------------------------------------------------------------------
     処理される格納ファイルごとに次の1・2を繰り返す。

    1.ARCEXTRACT_OPEN(3) でメッセージを送出。
      szSourceFileName に処理する書庫名が格納される。

    2.ARCEXTRACT_BEGIN(0) でメッセージを送出。
      szSourceFileName, szDestFileName, ファイル属性, 更新日時が有効になる。
      最初に送信された際に dwFileSize, llFileSize ヘ処理が行われる
      ファイルの合計サイズが格納される。
    (合計サイズがオーバーフローする場合は 0xFFFFFFFF(-1) を格納)
      解凍時(e,x コマンド)は他の各メンバも有効になる。
      削除時(d コマンド)は送出されず、3を処理が終わるまで繰り返す。

    3.ARCEXTRACT_INPROCESS(1) でメッセージを送出。
    dwWriteSize, llWriteSize にこれまで処理した合計サイズが格納される。
    (dwFileSize が 0xFFFFFFFF(-1) の場合は dwWriteSize には全体の処理率を格納)
    処理中のファイルの処理が終わるまで送出される。
      場合によっては送出されない事もある。

      他に処理するファイルが残っている場合は2へ戻り
      すべての処理が終了した時点で4へ。(処理状況表示を消すタイミング)

    4.ARCEXTRACT_END(2) でメッセージを送出。
      lParam(_lpEis) は 0(NULL) が格納される。

1230/ Re[4]: vb6.0作成したexeの場合、コールバックが走っていない
・投稿者/ li
・投稿日/ 2021/02/03(Wed) 10:54:35
・URL/

    test.xlsxを7zip.exeでtest.zipに圧縮して、C:\に置く。

    デバッグで、解凍時、lpEis.exinfo.szSourceFileName値は「整瑳??x????????揩??0」となっています。
    exeファイルで、解凍時、lpEis.exinfo.szSourceFileName値は「整瑳??x」だけになりました、後半の"????????揩??0"が切れました。
    何かの原因がご存じでしょうか?

    何度も質問して、申し訳ございません。

1232/ Re[5]: vb6.0作成したexeの場合、コールバックが走っていない
・投稿者/ Akky
・投稿日/ 2021/02/03(Wed) 20:39:38
・URL/

    VBは使った事がないので良く分からないのですが
    EXTRACTINGINFO(EX)のメンバにStringを使ってますが
    これの定義の仕方ってこれで正しいのでしょうか?
    ここでメモリの破壊が起きてるような気がします。
    それから、文字列がUnicodeだったりASCIIだったりの変換で
    何か問題が起こってるような気がします。

1226/ Re[2]: vb6.0作成したexeの場合、コールバックが走っていない
・投稿者/ li
・投稿日/ 2021/01/25(Mon) 10:36:59
・URL/

    > SevenZipSetOwnerWindowExで指定した_lpArcProc内の変数(EXTRACTINGINFOEX)が
    > 正常に初期化されてないのが原因ではないかと思います。
    ⇒EXTRACTINGINFOEXの構造体定義を追記します。

    'EXTRACTINGINFO の構造
    '--------------------------------------------------------
    Private Type EXTRACTINGINFO
    dwFileSize As Long
    dwWriteSize As Long
    szSourceFileName As String * 513
    dummy1 As String * 3
    szDestFileName As String * 513
    dummy As String * 3
    End Type

    'EXTRACTINGINFOEX の構造
    '--------------------------------------------------------
    Private Type EXTRACTINGINFOEX
    exinfo As EXTRACTINGINFO
    dwCompressedSize As Long
    dwCRC As Long
    uOSType As Long
    wRatio As Long
    wDate As Long
    wTime As Long
    szAttribute As String * 8
    szMode As String * 8
    End Type

1225/ Re[2]: vb6.0作成したexeの場合、コールバックが走っていない
・投稿者/ li
・投稿日/ 2021/01/25(Mon) 10:20:06
・URL/

    ご回答、ありがとうございます。
    コードを追記させていただきます。
    画面ボタンをクリックすると、Moduleに書いたFunAを呼び出す、
    デバッグの場合、問題がないです。
    実行ファイル(.exe)の場合、解凍できなく、解凍状況が受け取ることができません。

    Public Function FunA(hwnd As Long, ByVal strFile As String, ByVal strDir As String) As Boolean
    '解凍コマンド
    cmdLine = "x " & strFile & " -o" & strDir & " -aoa -hide"

    'コールバック関数の指定
    blnRun = SevenZipSetOwnerWindowEx(hwnd, AddressOf callback)
    '解凍
    resCode = SevenZip(hwnd, cmdLine , sOutPut, 0)
    FunA = True
    End Function

    'コールバック
    Public Function CallBack(hwnd As Long, uMsg As Long, ByRef nState As Long, ByRef lpEis As EXTRACTINGINFOEX) As Long
    '解凍状況表示
    Form1.Label1.Caption=StrConv(lpEis.exinfo.szSourceFileName, vbUnicode)

    CallBack= True
    End Function

    確認したいですが、
    実行ファイル(.exe)の場合、解凍状況が受け取ることができない原因は何の可能でしょうか?




1216/ -i! にスペースが連続してあると解凍されません
・投稿者/ 竹内 -(2019/02/06(Wed) 12:58:06)
・URL/

    【ソフト名】
    7-zip32.dll

    【バージョン】
    9.22.0.2

    【使用OS】
    Windows7 64bit

    【PC機種】
    DELL Vostro 3460

    【質問内容】

    下記の様なコマンドを実行すると解凍されません。
    -i! のパスにスペースが連続して2つ以上あると解凍されない様です。

    x "c:\xxxxx\test.zip" -o"c:\xxxx\data\" -i!"sampe\test1 test2.txt" -y

    実行時のメッセージは
    ------------------------------
    No files to process

    Files: 0
    Size: 0
    Compressed: 4526835
    ------------------------------
    となっています。


    -i! のスペースが1つならば解凍されます。
    x "c:\xxxxx\test.zip" -o"c:\xxxx\data\" -i!"sampe\test1 test2.txt" -y


    本家の 7z.exe (18.6.0.0) に上記コマンドで解凍をおこなうと解凍する事が出来ます。




1221/ (削除)
・投稿者/
・投稿日/ 2019/02/20(Wed) 09:01:27
・URL/

1218/ Re[1]: -i! にスペースが連続してあると解凍されません
・投稿者/ Akky
・投稿日/ 2019/02/17(Sun) 22:30:17
・URL/

    返事が遅くなって申し訳ありません。
    再現出来ずに後でと思っててそのまま失念してしまってました。

    それで再度色々試してみましたがそもそもスペース1つでも解凍できませんね。
    本家のコマンドライン版の9.22と18.06にて検証してみましたがどちらも出来ませんでした。
    この場合はsampeフォルダ内の"test1 test2.txt"というスペースが含まれた一つのファイル名を指定した事になると思われます。

    ですので、正しいコマンドラインの指定の仕方ですが
    > x "c:\xxxxx\test.zip" -o"c:\xxxx\data\" -i!"sampe\test1 test2.txt" -y
    ではなくて
    x "c:\xxxxx\test.zip" "-oc:\xxxx\data\" "-i!sampe\test1" "-i!test2.txt" -y
    とスペースで区切らずに複数-iスイッチを指定すれば出来るみたいです。
    ついでにダブルクオーテーションはスイッチを含め全てを囲って下さい。

1219/ Re[2]: -i! にスペースが連続してあると解凍されません
・投稿者/ 竹内
・投稿日/ 2019/02/18(Mon) 17:12:30
・URL/

    回答いただきありがとうございます。


    すみません
    書き方がまずかったです。

    圧縮ファイル内は下記の様になっています。
    ■ test.zip
    └■ Sample
     └□ test1 test2.txt

    なので、"test1 test2.txt" というファイル名(スペースが2つ以上連続している)の
    ファイルを1つ解凍しようとしています。


1220/ Re[3]: -i! にスペースが連続してあると解凍されません
・投稿者/ Akky
・投稿日/ 2019/02/19(Tue) 12:19:20
・URL/

    詳細有難うございます、こちらでも再現できました。
    結局の所、""の囲む位置が問題になってますね。
    オプション含め全てを囲めば大丈夫です。
    ただ、本家のコマンドライン版においては9.22の時点でも
    ファイル名だけ""で括る方法もサポートしている様なので
    対応出来たらしていきたいと思います。

1222/ Re[4]: -i! にスペースが連続してあると解凍されません
・投稿者/ 竹内 解決済み!
・投稿日/ 2019/02/20(Wed) 09:01:59
・URL/

    ありがごうございます。

    -i!"sampe\test1 test2.txt"

    "-i!sampe\test1 test2.txt"
    とすることで、解凍する事ができました。

    助かりました!
    ご回答いただきありがとうございました。



1212/ zipファイル内の列挙で拡張子無しのファイルが...
・投稿者/ Crc -(2018/08/18(Sat) 11:35:47)
・URL/

    【ソフト名】7-Zip32.dll

    【バージョン】4.65.00.01

    【使用OS】Windows 10

    【質問内容】

    7-Zip32.dllを使おうとしている者です。
    WinAPIで言うファイルの列挙に相当するSevenZipFindFirst, SevenZipFindNextを用いる方法で
    書庫内のリストを取得する際、ファイルではあるが拡張子無しの場合、
    そもそも列挙されません。
    動的リンクをして(DLL管理する)クラスを定義して...とやっています。
    SevenZipOpenArchive関数をラップした関数の引数でDWORDの方をM_CHECK_ALL_PATHを渡し、
    パスワードがあるならそれをセット...のようにして列挙しています。
    例えば書庫内に

    myheaders <- ファイルとして。C++のcstdio, cstring, string, iostream のような状態
    main.cpp
    class1.h
    class1.cpp

    とあるとします。
    main.cpp, class1.h, class1.cpp は成功しますが myheadersは列挙対象にすら上がっていません。

    初期設定として SevenZipOpenArchiveで開いた後、FindFirstの方で一度取得。
    ERROR_PASSWORD_FILE が返ってきたらreturn。
    後は while( true ) で無限ループし、FindNextの方で取得。
    ERROR_PASSWORD_FILEが返ってきたときだけすぐさまreturn。 ( closeはしますが。 )
    それ以外はそのまま...

    と言う流れです。



1213/ Re[1]: zipファイル内の列挙で拡張子無しのファイルが...
・投稿者/ Akky
・投稿日/ 2018/08/20(Mon) 21:03:26
・URL/

    返事遅くなってスミマセン。
    多分ですが、SevenZipFindFirstで*.*を指定してませんか?
    これは拡張子を含むファイルを意味するので単純に*を使ってください。

    7-zipCMD.txtを参照

    7-zip32.dll は システムワイルドカードマスク分析をしておらず、
    *.* が全てのファイルを意味すると言う古い規則に従いません。
    7-zip32.dll は *.* を全ての拡張子を持ったファイルとして扱います。
    全てのファイルを処理するには * を使用しなければなりません

1214/ Re[2]: zipファイル内の列挙で拡張子無しのファイルが...
・投稿者/ Crc
・投稿日/ 2018/08/22(Wed) 10:30:52
・URL/

    返信遅れてすみません。
    あぁ、なるほど。確かに *.*とやっていました。

    対象ディレクトリ + "*.*"

    確かにこれでは...
    帰宅後試してみます。

1215/ Re[3]: zipファイル内の列挙で拡張子無しのファイルが...
・投稿者/ Crc 解決済み!
・投稿日/ 2018/08/24(Fri) 09:56:02
・URL/

    すみません。解決済みのチェックしていませんでした...
    (使い方がわからなかった...)



1205/ myoza
・投稿者/ Aあ -(2017/11/02(Thu) 14:33:35)
・URL/

    【ソフト名】
    myoza
    【バージョン】
    111
    【使用OS】
    10
    【PC機種】
    windows
    【質問内容】
    前まで無かった白線が毎回myozaに出てくるのは使用ですか。
    消す方法はありますか。



1206/ Re[1]: myoza
・投稿者/ Akky
・投稿日/ 2017/11/15(Wed) 11:23:53
・URL/

    返事遅くなってすみません。
    Windows10には対応してません。
    対応したいとは考えてますがちょっと難しいかんじです。



1202/ 7-ZIP32.DLL 書庫テスト時のCALL BACKについて
・投稿者/ hlhex -(2017/08/03(Thu) 11:31:43)
・URL/

    【ソフト名】
    7-ZIP32.DLL
    【バージョン】
    Version 9.22.00.02
    【使用OS】
    Windows10
    【PC機種】

    【質問内容】

    t コマンド / SevenZipCheckArchive 使用時に SevenZipSetOwnerWindowらを
    設定していても、ARCHIVERPROCが呼び出されないようです。

    7z付属の 7-Zip File Manager の書庫テストでは、テスト時にテストしている
    書庫内ファイルの表示やプログレスバーの進捗表示されているので、7z.dll上では実装可能だと思うのですが、
    この様な動作を、7-zip32.dllのAPIで実装する方法は無いのでしょうか?



1204/ Re[1]: 7-ZIP32.DLL 書庫テスト時のCALL BACKについて
・投稿者/ Akky
・投稿日/ 2017/08/21(Mon) 18:36:43
・URL/

    返事遅くなって申し訳ありません
    こちら最近チェックを怠ってました。

    tコマンドやSevenZipCheckArchiveでコールバックが呼ばれないのは仕様です。
    ちょっとソースを見返しまして確認しましたがその辺の処理を実装した
    記憶もないので多分そうだと思います。
    ソースを変更することで実装することは可能かと思いますが
    現状セキュリティーホールの修正のみになってしまっており
    なかなか手がつけられてない状態です。
    申し訳ありませんがご了承ください。



全ページ数 / [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19]



- Child Tree -