お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"RE:CAB形式のファイル圧縮・解凍"

この発言は
#00814 河邦 正 さんのCAB形式のファイル圧縮・解凍
に対するコメントです

nifty:FDELPHI/MES/16/814 の「CAB形式のファイル圧縮・解凍」の 内容の一部(解凍の利用例)を訂正します。  CabinetExtractFile を以下のように訂正します。 type TMyParam = record Item: string; ExtractName: string; end; function fnFDINotify(fdint: TFDINOTIFICATIONTYPE; pfdin: PFDINOTIFICATION): Integer; cdecl; var os: OFSTRUCT; Param: ^TMyParam; begin Param := pfdin.pv; begin case(fdint)of fdintCOPY_FILE: if CompareText(pfdin^.psz1, Param^.Item) = 0 then Result := OpenFile(PChar(Param^.ExtractName), os, OF_CREATE) else Result := 0; fdintCLOSE_FILE_INFO: begin // 本来はここでファイルの属性などを設定します _lclose(pfdin^.hf); pfdin^.cb := 1; // continue Result := 1; // こっちが continue の指定? end; else // できれば他の NotificationType にも応答する方が良いはず Result := 0; end; end; end; procedure CabinetExtractFile(Cabinet, Item, ExtractName: string); var fdi: THandle; erf: TERF; Param: TMyParam; begin ZeroMemory(@erf, sizeof(erf)); // コンテキストの構築にコールバック関数を用います fdi := FDICreate(@fnAlloc, @fnFree, @fnOpen, @fnRead, @fnWrite, @fnClose, @fnSeek,-1, erf); if fdi <> 0 then try Param.Item := Item; Param.ExtractName := ExtractName; FDICopy(fdi, PChar(ExtractFileName(Cabinet)), PChar(ExtractFilePath(Cabinet)), 0, @fnFDINotify, nil, @Param); finally // 使用済みコンテキストの破棄 FDIDestroy(fdi); end; end; ※変更点は、ユーザー定義の情報のコールバック関数への受け渡し方法 を、関数内関数による親関数の引数参照から、本来あるべき方式(コー ルバック関数のアドレスを引数で渡す際に、同じく引数で渡される構造体 に含める)にしたことです。 2001/06/07、河邦 正(GCC02240@nifty.com) (http://homepage2.nifty.com/kht0000/、NIFTY外へ私作のComponentの 公開用)  Original document by 河邦 正 氏 ID:(GCC02240)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum