マックバイナリー操作用COMコンポーネントのAPI

以下は開発者向けの情報です。

■オブジェクトの生成方法

ProgIDは「MacBinManipulator.MacBinFile」である。よってたとえばVBScriptで生成する場合は以下のようにする。

Dim macbin
Set macbin = WScript.CreateObject("MacBinManipulator.MacBinFile")

■メソッド

メソッドの戻り値はすべてHRESULTである。{}内の引数はVB(Visual Basic)等で使用する場合は省略可である。最後の引数pValはVisual Basicで言う戻り値である。BSTRはVisual BasicでのStringである。

  1. OpenFile(BSTR MacFilePath)
    MacFilePathのパスで指定される(マックバイナリー)ファイルをオープンする。
  2. CloseFile
    ファイルを閉じる
  3. ExtractDataFork(BSTR FilePath {, long flags})
    1.で開いたファイルのデータフォークをFilePathで指定されるパスに保存する。ファイルがすでに存在する場合それは上書きされる。flags = 1のとき、ファイルの作成日・修正日が元のファイルと同じ値にセットされる。
  4. ExtractRsrcFork(BSTR FilePath {, long flags})
    1.で開いたファイルのリソースフォークをFilePathで指定されるパスに保存する。ファイルがすでに存在する場合それは上書きされる。flags = 1のとき、ファイルの作成日・修正日が元のファイルと同じ値にセットされる。
  5. GetOpenFileName({VARIANT vFilter, VARIANT vPath, VARIANT vTitle, VARIANT vFlags,} /*[out, retval]*/BSTR *pVal)
    ファイルオープンダイアログボックスを表示してファイルを選択するための補助関数。ユーザーが選択したファイルのパスが*pValに返される。(ユーザーがキャンセルした場合、関数の戻り値はS_FALSEになる。) この関数でファイルを選択してもファイルはオープンされないので、オープンする場合は得られたパスをOpenFileメソッドに渡す。
    vFilter: フィルター文字列(例:"Mac Binary|*.bin|All Files|*.*|"
    vPath: デフォルトのディレクトリパス
    vTitle: ダイアログボックスのウインドウタイトル
    vFlags: ダイアログ表示フラグ(OPENFILENAME構造体のFlagsメンバーの値。デフォルトはOFN_EXPLORER | OFN_HIDEREADONLY | OFN_FILEMUSTEXIST。VBでは通常省略してよい。)
  6. GetSaveFileName(BSTR fileName, BSTR defExt {, VARIANT vFilter, VARIANT vPath, VARIANT vTitle, VARIANT vFlags,} /*[out, retval]*/BSTR *pVal)
    ファイル保存ダイアログボックスを表示する補助関数。 ユーザーが入力したファイルのパスが*pValに返される。(ユーザーがキャンセルした場合、関数の戻り値はS_FALSEになる。)
    fileName: ファイル名の初期値
    defExt: デフォルトの拡張子
    vFilter: フィルター文字列(例:"Mac Binary|*.bin|All Files|*.*|"
    vPath: デフォルトのディレクトリパス
    vTitle: ダイアログボックスのウインドウタイトル
    vFlags: ダイアログ表示フラグ(OPENFILENAME構造体のFlagsメンバーの値。デフォルトはOFN_EXPLORER|OFN_OVERWRITEPROMPT。VBでは通常省略してよい。)

■プロパティ

プロパティはすべてReadOnlyである。

  1. MacBinVersion: long
    オープンされたファイルのマックバイナリフォーマットのバージョン(1~3)。0ならそのファイルはマックバイナリではない。
  2. MacBinHeader: short
    引数(short integer)を持つプロパティである。引数は0~127の範囲でなくてはならない。128バイトのマックバイナリヘッダの各バイトの値(0~255)を返す。このプロパティはファイルをクローズした後でも次のファイルを開くまで有効である。
  3. DataForkSize: long
    マックバイナリファイルのデータフォークのサイズ(バイト)。(ファイルによっては0であることもある)
  4. RsrcForkSize: long
    マックバイナリファイルのリソースフォークのサイズ(バイト)。(ファイルによっては0であることもある)
  5. FileCount: long
    GetOpenFileNameまたはGetSaveFileNameメソッドで選択または入力されたファイルの数。通常は0(キャンセルした場合)または1である。(vFlagsでOFN_ALLOWMULTISELECT(=0x00000200)を指定した場合は2以上になることもある。)

■サンプルスクリプト

Dim macbin
On Error Resume Next
Set macbin = WScript.CreateObject("MacBinManipulator.MacBinFile")
If Err.Number <> 0 Then
 MsgBox "MacBinManipulatorコンポーネントがシステムにインストールされていません。", vbCritical
Else
 On Error Goto 0
 Dim filePath
 filePath = macbin.GetOpenFileName()
 If macbin.FileCount = 1 Then
  Call macbin.OpenFile(filePath) 'GetOpenFileNameだけではファイルはオープンされないのに注意
  If macbin.MacBinVersion > 0 Then
   Dim msg
   msg = "MacBinary Version: " & macbin.MacBinVersion & vbCrLf & "Data Fork Size: " & macbin.DataForkSize & " bytes" & vbCrLf & "Resource Fork Size: " & macbin.RsrcForkSize & " bytes" & vbCrLf & vbCrLf
   If macbin.DataForkSize > 0 Then 'データフォークが存在する
    If MsgBox( msg & "データフォークをファイルに保存しますか?", vbYesNo + vbQuestion, "MacBinManipulator") = vbYes Then
     Dim fso
     Dim newFileName, ext, defExt, filter
     defExt = "dat"
     On Error Resume Next
     Set fso = WScript.CreateObject("Scripting.FileSystemObject")
     If Err.Number <> 0 Then
      On Error Goto 0
      newFileName = "NewFile.dat"
     Else
      On Error Goto 0
      newFileName = fso.GetFileName(filePath)
      ext = fso.GetExtensionName(newFileName)
      If StrComp(ext, "bin", 1) = 0 Then
       newFileName = fso.GetBaseName(newFileName)
       defExt = fso.GetExtensionName(newFileName)
       If defExt = "" Then
        defExt = "dat"
        newFileName = newFileName & ".dat"
       End If
      ElseIf(ext = "") Then
       newFileName = newFileName & ".dat"
      Else
       defExt = ext
       newFileName = fso.GetBaseName(newFileName) & "_dat." & ext
      End If
     End If

     If StrComp(defExt, "dat", 1) = 0 Then
      filter = "" 'Use default filter
     Else
      filter = "*." & defExt & "|*." & defExt & "|All Files (*.*)|*.*|"
     End If

     Dim newFilePath
     newFilePath = macbin.GetSaveFileName(newFileName , defExt, filter, fso.GetParentFolderName(filePath))
     If newFilePath <> "" Then
      Call macbin.ExtractDataFork(newFilePath, 1) 'flags = 1: ファイル日付をオリジナルファイルと同じにする
     End If
     
    End If
   Else 'リソースフォークの保存はあまり意味が無いのでやらない
    MsgBox msg, vbInformation, "MacBinManipulator"
   End If
  Else
   MsgBox filePath & vbCrLf & "はマックバイナリではないようです。", vbInformation, "MacBinManipulator"
  End If
 End If
End If

■その他

DLLファイルのインストール場所は 「Drive:\ProgramFiles\Common Files\Kanadea Software\Utilities\MacBinManipulator.dll」である。

戻る