Win32 API 日本語リファレンス
ホームGraphics.Gdi › MergeFontPackage

MergeFontPackage

関数
サブセットフォントパッケージを統合して完全なフォントを再構成する。
DLLFONTSUB.dll呼出規約cdecl対応OSWindows XP 以降

シグネチャ

// FONTSUB.dll
#include <windows.h>

DWORD MergeFontPackage(
    const BYTE* puchMergeFontBuffer,
    DWORD ulMergeFontBufferSize,
    const BYTE* puchFontPackageBuffer,
    DWORD ulFontPackageBufferSize,
    BYTE** ppuchDestBuffer,
    DWORD* pulDestBufferSize,
    DWORD* pulBytesWritten,
    WORD usMode,
    CFP_ALLOCPROC lpfnAllocate,
    CFP_REALLOCPROC lpfnReAllocate,
    CFP_FREEPROC lpfnFree,
    void* lpvReserved
);

パラメーター

名前方向
puchMergeFontBufferBYTE*in
ulMergeFontBufferSizeDWORDin
puchFontPackageBufferBYTE*in
ulFontPackageBufferSizeDWORDin
ppuchDestBufferBYTE**inout
pulDestBufferSizeDWORD*inout
pulBytesWrittenDWORD*inout
usModeWORDin
lpfnAllocateCFP_ALLOCPROCin
lpfnReAllocateCFP_REALLOCPROCin
lpfnFreeCFP_FREEPROCin
lpvReservedvoid*inout

戻り値の型: DWORD

各言語での呼び出し定義

// FONTSUB.dll
#include <windows.h>

DWORD MergeFontPackage(
    const BYTE* puchMergeFontBuffer,
    DWORD ulMergeFontBufferSize,
    const BYTE* puchFontPackageBuffer,
    DWORD ulFontPackageBufferSize,
    BYTE** ppuchDestBuffer,
    DWORD* pulDestBufferSize,
    DWORD* pulBytesWritten,
    WORD usMode,
    CFP_ALLOCPROC lpfnAllocate,
    CFP_REALLOCPROC lpfnReAllocate,
    CFP_FREEPROC lpfnFree,
    void* lpvReserved
);
[DllImport("FONTSUB.dll", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
static extern uint MergeFontPackage(
    IntPtr puchMergeFontBuffer,   // BYTE*
    uint ulMergeFontBufferSize,   // DWORD
    IntPtr puchFontPackageBuffer,   // BYTE*
    uint ulFontPackageBufferSize,   // DWORD
    IntPtr ppuchDestBuffer,   // BYTE** in/out
    ref uint pulDestBufferSize,   // DWORD* in/out
    ref uint pulBytesWritten,   // DWORD* in/out
    ushort usMode,   // WORD
    IntPtr lpfnAllocate,   // CFP_ALLOCPROC
    IntPtr lpfnReAllocate,   // CFP_REALLOCPROC
    IntPtr lpfnFree,   // CFP_FREEPROC
    IntPtr lpvReserved   // void* in/out
);
<DllImport("FONTSUB.dll", ExactSpelling:=True, CallingConvention:=CallingConvention.Cdecl)>
Public Shared Function MergeFontPackage(
    puchMergeFontBuffer As IntPtr,   ' BYTE*
    ulMergeFontBufferSize As UInteger,   ' DWORD
    puchFontPackageBuffer As IntPtr,   ' BYTE*
    ulFontPackageBufferSize As UInteger,   ' DWORD
    ppuchDestBuffer As IntPtr,   ' BYTE** in/out
    ByRef pulDestBufferSize As UInteger,   ' DWORD* in/out
    ByRef pulBytesWritten As UInteger,   ' DWORD* in/out
    usMode As UShort,   ' WORD
    lpfnAllocate As IntPtr,   ' CFP_ALLOCPROC
    lpfnReAllocate As IntPtr,   ' CFP_REALLOCPROC
    lpfnFree As IntPtr,   ' CFP_FREEPROC
    lpvReserved As IntPtr   ' void* in/out
) As UInteger
End Function
' puchMergeFontBuffer : BYTE*
' ulMergeFontBufferSize : DWORD
' puchFontPackageBuffer : BYTE*
' ulFontPackageBufferSize : DWORD
' ppuchDestBuffer : BYTE** in/out
' pulDestBufferSize : DWORD* in/out
' pulBytesWritten : DWORD* in/out
' usMode : WORD
' lpfnAllocate : CFP_ALLOCPROC
' lpfnReAllocate : CFP_REALLOCPROC
' lpfnFree : CFP_FREEPROC
' lpvReserved : void* in/out
Declare PtrSafe Function MergeFontPackage Lib "fontsub" ( _
    ByVal puchMergeFontBuffer As LongPtr, _
    ByVal ulMergeFontBufferSize As Long, _
    ByVal puchFontPackageBuffer As LongPtr, _
    ByVal ulFontPackageBufferSize As Long, _
    ByVal ppuchDestBuffer As LongPtr, _
    ByRef pulDestBufferSize As Long, _
    ByRef pulBytesWritten As Long, _
    ByVal usMode As Integer, _
    ByVal lpfnAllocate As LongPtr, _
    ByVal lpfnReAllocate As LongPtr, _
    ByVal lpfnFree As LongPtr, _
    ByVal lpvReserved As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

MergeFontPackage = ctypes.cdll.fontsub.MergeFontPackage
MergeFontPackage.restype = wintypes.DWORD
MergeFontPackage.argtypes = [
    ctypes.POINTER(ctypes.c_ubyte),  # puchMergeFontBuffer : BYTE*
    wintypes.DWORD,  # ulMergeFontBufferSize : DWORD
    ctypes.POINTER(ctypes.c_ubyte),  # puchFontPackageBuffer : BYTE*
    wintypes.DWORD,  # ulFontPackageBufferSize : DWORD
    ctypes.c_void_p,  # ppuchDestBuffer : BYTE** in/out
    ctypes.POINTER(wintypes.DWORD),  # pulDestBufferSize : DWORD* in/out
    ctypes.POINTER(wintypes.DWORD),  # pulBytesWritten : DWORD* in/out
    ctypes.c_ushort,  # usMode : WORD
    ctypes.c_void_p,  # lpfnAllocate : CFP_ALLOCPROC
    ctypes.c_void_p,  # lpfnReAllocate : CFP_REALLOCPROC
    ctypes.c_void_p,  # lpfnFree : CFP_FREEPROC
    ctypes.POINTER(None),  # lpvReserved : void* in/out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('FONTSUB.dll')
MergeFontPackage = Fiddle::Function.new(
  lib['MergeFontPackage'],
  [
    Fiddle::TYPE_VOIDP,  # puchMergeFontBuffer : BYTE*
    -Fiddle::TYPE_INT,  # ulMergeFontBufferSize : DWORD
    Fiddle::TYPE_VOIDP,  # puchFontPackageBuffer : BYTE*
    -Fiddle::TYPE_INT,  # ulFontPackageBufferSize : DWORD
    Fiddle::TYPE_VOIDP,  # ppuchDestBuffer : BYTE** in/out
    Fiddle::TYPE_VOIDP,  # pulDestBufferSize : DWORD* in/out
    Fiddle::TYPE_VOIDP,  # pulBytesWritten : DWORD* in/out
    -Fiddle::TYPE_SHORT,  # usMode : WORD
    Fiddle::TYPE_VOIDP,  # lpfnAllocate : CFP_ALLOCPROC
    Fiddle::TYPE_VOIDP,  # lpfnReAllocate : CFP_REALLOCPROC
    Fiddle::TYPE_VOIDP,  # lpfnFree : CFP_FREEPROC
    Fiddle::TYPE_VOIDP,  # lpvReserved : void* in/out
  ],
  -Fiddle::TYPE_INT, Fiddle::Function::CDECL)
#[link(name = "fontsub")]
extern "C" {
    fn MergeFontPackage(
        puchMergeFontBuffer: *const u8,  // BYTE*
        ulMergeFontBufferSize: u32,  // DWORD
        puchFontPackageBuffer: *const u8,  // BYTE*
        ulFontPackageBufferSize: u32,  // DWORD
        ppuchDestBuffer: *mut *mut u8,  // BYTE** in/out
        pulDestBufferSize: *mut u32,  // DWORD* in/out
        pulBytesWritten: *mut u32,  // DWORD* in/out
        usMode: u16,  // WORD
        lpfnAllocate: *const core::ffi::c_void,  // CFP_ALLOCPROC
        lpfnReAllocate: *const core::ffi::c_void,  // CFP_REALLOCPROC
        lpfnFree: *const core::ffi::c_void,  // CFP_FREEPROC
        lpvReserved: *mut ()  // void* in/out
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("FONTSUB.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern uint MergeFontPackage(IntPtr puchMergeFontBuffer, uint ulMergeFontBufferSize, IntPtr puchFontPackageBuffer, uint ulFontPackageBufferSize, IntPtr ppuchDestBuffer, ref uint pulDestBufferSize, ref uint pulBytesWritten, ushort usMode, IntPtr lpfnAllocate, IntPtr lpfnReAllocate, IntPtr lpfnFree, IntPtr lpvReserved);
"@
$api = Add-Type -MemberDefinition $sig -Name 'FONTSUB_MergeFontPackage' -Namespace Win32 -PassThru
# $api::MergeFontPackage(puchMergeFontBuffer, ulMergeFontBufferSize, puchFontPackageBuffer, ulFontPackageBufferSize, ppuchDestBuffer, pulDestBufferSize, pulBytesWritten, usMode, lpfnAllocate, lpfnReAllocate, lpfnFree, lpvReserved)
#uselib "FONTSUB.dll"
#func global MergeFontPackage "MergeFontPackage" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; MergeFontPackage varptr(puchMergeFontBuffer), ulMergeFontBufferSize, varptr(puchFontPackageBuffer), ulFontPackageBufferSize, varptr(ppuchDestBuffer), varptr(pulDestBufferSize), varptr(pulBytesWritten), usMode, lpfnAllocate, lpfnReAllocate, lpfnFree, lpvReserved   ; 戻り値は stat
; puchMergeFontBuffer : BYTE* -> "sptr"
; ulMergeFontBufferSize : DWORD -> "sptr"
; puchFontPackageBuffer : BYTE* -> "sptr"
; ulFontPackageBufferSize : DWORD -> "sptr"
; ppuchDestBuffer : BYTE** in/out -> "sptr"
; pulDestBufferSize : DWORD* in/out -> "sptr"
; pulBytesWritten : DWORD* in/out -> "sptr"
; usMode : WORD -> "sptr"
; lpfnAllocate : CFP_ALLOCPROC -> "sptr"
; lpfnReAllocate : CFP_REALLOCPROC -> "sptr"
; lpfnFree : CFP_FREEPROC -> "sptr"
; lpvReserved : void* in/out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "FONTSUB.dll"
#cfunc global MergeFontPackage "MergeFontPackage" var, int, var, int, var, var, var, int, sptr, sptr, sptr, sptr
; res = MergeFontPackage(puchMergeFontBuffer, ulMergeFontBufferSize, puchFontPackageBuffer, ulFontPackageBufferSize, ppuchDestBuffer, pulDestBufferSize, pulBytesWritten, usMode, lpfnAllocate, lpfnReAllocate, lpfnFree, lpvReserved)
; puchMergeFontBuffer : BYTE* -> "var"
; ulMergeFontBufferSize : DWORD -> "int"
; puchFontPackageBuffer : BYTE* -> "var"
; ulFontPackageBufferSize : DWORD -> "int"
; ppuchDestBuffer : BYTE** in/out -> "var"
; pulDestBufferSize : DWORD* in/out -> "var"
; pulBytesWritten : DWORD* in/out -> "var"
; usMode : WORD -> "int"
; lpfnAllocate : CFP_ALLOCPROC -> "sptr"
; lpfnReAllocate : CFP_REALLOCPROC -> "sptr"
; lpfnFree : CFP_FREEPROC -> "sptr"
; lpvReserved : void* in/out -> "sptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; DWORD MergeFontPackage(BYTE* puchMergeFontBuffer, DWORD ulMergeFontBufferSize, BYTE* puchFontPackageBuffer, DWORD ulFontPackageBufferSize, BYTE** ppuchDestBuffer, DWORD* pulDestBufferSize, DWORD* pulBytesWritten, WORD usMode, CFP_ALLOCPROC lpfnAllocate, CFP_REALLOCPROC lpfnReAllocate, CFP_FREEPROC lpfnFree, void* lpvReserved)
#uselib "FONTSUB.dll"
#cfunc global MergeFontPackage "MergeFontPackage" var, int, var, int, var, var, var, int, intptr, intptr, intptr, intptr
; res = MergeFontPackage(puchMergeFontBuffer, ulMergeFontBufferSize, puchFontPackageBuffer, ulFontPackageBufferSize, ppuchDestBuffer, pulDestBufferSize, pulBytesWritten, usMode, lpfnAllocate, lpfnReAllocate, lpfnFree, lpvReserved)
; puchMergeFontBuffer : BYTE* -> "var"
; ulMergeFontBufferSize : DWORD -> "int"
; puchFontPackageBuffer : BYTE* -> "var"
; ulFontPackageBufferSize : DWORD -> "int"
; ppuchDestBuffer : BYTE** in/out -> "var"
; pulDestBufferSize : DWORD* in/out -> "var"
; pulBytesWritten : DWORD* in/out -> "var"
; usMode : WORD -> "int"
; lpfnAllocate : CFP_ALLOCPROC -> "intptr"
; lpfnReAllocate : CFP_REALLOCPROC -> "intptr"
; lpfnFree : CFP_FREEPROC -> "intptr"
; lpvReserved : void* in/out -> "intptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	fontsub = windows.NewLazySystemDLL("FONTSUB.dll")
	procMergeFontPackage = fontsub.NewProc("MergeFontPackage")
)

// puchMergeFontBuffer (BYTE*), ulMergeFontBufferSize (DWORD), puchFontPackageBuffer (BYTE*), ulFontPackageBufferSize (DWORD), ppuchDestBuffer (BYTE** in/out), pulDestBufferSize (DWORD* in/out), pulBytesWritten (DWORD* in/out), usMode (WORD), lpfnAllocate (CFP_ALLOCPROC), lpfnReAllocate (CFP_REALLOCPROC), lpfnFree (CFP_FREEPROC), lpvReserved (void* in/out)
r1, _, err := procMergeFontPackage.Call(
	uintptr(puchMergeFontBuffer),
	uintptr(ulMergeFontBufferSize),
	uintptr(puchFontPackageBuffer),
	uintptr(ulFontPackageBufferSize),
	uintptr(ppuchDestBuffer),
	uintptr(pulDestBufferSize),
	uintptr(pulBytesWritten),
	uintptr(usMode),
	uintptr(lpfnAllocate),
	uintptr(lpfnReAllocate),
	uintptr(lpfnFree),
	uintptr(lpvReserved),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // DWORD
function MergeFontPackage(
  puchMergeFontBuffer: Pointer;   // BYTE*
  ulMergeFontBufferSize: DWORD;   // DWORD
  puchFontPackageBuffer: Pointer;   // BYTE*
  ulFontPackageBufferSize: DWORD;   // DWORD
  ppuchDestBuffer: Pointer;   // BYTE** in/out
  pulDestBufferSize: Pointer;   // DWORD* in/out
  pulBytesWritten: Pointer;   // DWORD* in/out
  usMode: Word;   // WORD
  lpfnAllocate: Pointer;   // CFP_ALLOCPROC
  lpfnReAllocate: Pointer;   // CFP_REALLOCPROC
  lpfnFree: Pointer;   // CFP_FREEPROC
  lpvReserved: Pointer   // void* in/out
): DWORD; cdecl;
  external 'FONTSUB.dll' name 'MergeFontPackage';
result := DllCall("FONTSUB\MergeFontPackage"
    , "Ptr", puchMergeFontBuffer   ; BYTE*
    , "UInt", ulMergeFontBufferSize   ; DWORD
    , "Ptr", puchFontPackageBuffer   ; BYTE*
    , "UInt", ulFontPackageBufferSize   ; DWORD
    , "Ptr", ppuchDestBuffer   ; BYTE** in/out
    , "Ptr", pulDestBufferSize   ; DWORD* in/out
    , "Ptr", pulBytesWritten   ; DWORD* in/out
    , "UShort", usMode   ; WORD
    , "Ptr", lpfnAllocate   ; CFP_ALLOCPROC
    , "Ptr", lpfnReAllocate   ; CFP_REALLOCPROC
    , "Ptr", lpfnFree   ; CFP_FREEPROC
    , "Ptr", lpvReserved   ; void* in/out
    , "Cdecl UInt")   ; return: DWORD
●MergeFontPackage(puchMergeFontBuffer, ulMergeFontBufferSize, puchFontPackageBuffer, ulFontPackageBufferSize, ppuchDestBuffer, pulDestBufferSize, pulBytesWritten, usMode, lpfnAllocate, lpfnReAllocate, lpfnFree, lpvReserved) = DLL("FONTSUB.dll", "dword MergeFontPackage(void*, dword, void*, dword, void*, void*, void*, int, void*, void*, void*, void*)")
# 呼び出し: MergeFontPackage(puchMergeFontBuffer, ulMergeFontBufferSize, puchFontPackageBuffer, ulFontPackageBufferSize, ppuchDestBuffer, pulDestBufferSize, pulBytesWritten, usMode, lpfnAllocate, lpfnReAllocate, lpfnFree, lpvReserved)
# puchMergeFontBuffer : BYTE* -> "void*"
# ulMergeFontBufferSize : DWORD -> "dword"
# puchFontPackageBuffer : BYTE* -> "void*"
# ulFontPackageBufferSize : DWORD -> "dword"
# ppuchDestBuffer : BYTE** in/out -> "void*"
# pulDestBufferSize : DWORD* in/out -> "void*"
# pulBytesWritten : DWORD* in/out -> "void*"
# usMode : WORD -> "int"
# lpfnAllocate : CFP_ALLOCPROC -> "void*"
# lpfnReAllocate : CFP_REALLOCPROC -> "void*"
# lpfnFree : CFP_FREEPROC -> "void*"
# lpvReserved : void* in/out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
# ※cdecl関数。DLL()宣言はstdcall前提。cdeclは EXEC_PTR(`cdecl`,…) を使用。