ホーム › Graphics.Gdi › MergeFontPackage
MergeFontPackage
関数サブセットフォントパッケージを統合して完全なフォントを再構成する。
シグネチャ
// 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
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| puchMergeFontBuffer | BYTE* | in |
| ulMergeFontBufferSize | DWORD | in |
| puchFontPackageBuffer | BYTE* | in |
| ulFontPackageBufferSize | DWORD | in |
| ppuchDestBuffer | BYTE** | inout |
| pulDestBufferSize | DWORD* | inout |
| pulBytesWritten | DWORD* | inout |
| usMode | WORD | in |
| lpfnAllocate | CFP_ALLOCPROC | in |
| lpfnReAllocate | CFP_REALLOCPROC | in |
| lpfnFree | CFP_FREEPROC | in |
| lpvReserved | void* | 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 方式にも切替可。#uselib "FONTSUB.dll" #cfunc global MergeFontPackage "MergeFontPackage" sptr, int, sptr, int, sptr, sptr, sptr, int, sptr, sptr, sptr, sptr ; res = MergeFontPackage(varptr(puchMergeFontBuffer), ulMergeFontBufferSize, varptr(puchFontPackageBuffer), ulFontPackageBufferSize, varptr(ppuchDestBuffer), varptr(pulDestBufferSize), varptr(pulBytesWritten), usMode, lpfnAllocate, lpfnReAllocate, lpfnFree, lpvReserved) ; puchMergeFontBuffer : BYTE* -> "sptr" ; ulMergeFontBufferSize : DWORD -> "int" ; puchFontPackageBuffer : BYTE* -> "sptr" ; ulFontPackageBufferSize : DWORD -> "int" ; ppuchDestBuffer : BYTE** in/out -> "sptr" ; pulDestBufferSize : DWORD* in/out -> "sptr" ; pulBytesWritten : DWORD* in/out -> "sptr" ; usMode : WORD -> "int" ; lpfnAllocate : CFP_ALLOCPROC -> "sptr" ; lpfnReAllocate : CFP_REALLOCPROC -> "sptr" ; lpfnFree : CFP_FREEPROC -> "sptr" ; lpvReserved : void* in/out -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは 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 方式にも切替可。; 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" intptr, int, intptr, int, intptr, intptr, intptr, int, intptr, intptr, intptr, intptr ; res = MergeFontPackage(varptr(puchMergeFontBuffer), ulMergeFontBufferSize, varptr(puchFontPackageBuffer), ulFontPackageBufferSize, varptr(ppuchDestBuffer), varptr(pulDestBufferSize), varptr(pulBytesWritten), usMode, lpfnAllocate, lpfnReAllocate, lpfnFree, lpvReserved) ; puchMergeFontBuffer : BYTE* -> "intptr" ; ulMergeFontBufferSize : DWORD -> "int" ; puchFontPackageBuffer : BYTE* -> "intptr" ; ulFontPackageBufferSize : DWORD -> "int" ; ppuchDestBuffer : BYTE** in/out -> "intptr" ; pulDestBufferSize : DWORD* in/out -> "intptr" ; pulBytesWritten : DWORD* in/out -> "intptr" ; usMode : WORD -> "int" ; lpfnAllocate : CFP_ALLOCPROC -> "intptr" ; lpfnReAllocate : CFP_REALLOCPROC -> "intptr" ; lpfnFree : CFP_FREEPROC -> "intptr" ; lpvReserved : void* in/out -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは 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 // DWORDfunction 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`,…) を使用。