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

D2D1GetGradientMeshInteriorPointsFromCoonsPatch

関数
クーンズパッチから格子メッシュの内部点を算出する。
DLLd2d1.dll呼出規約winapi対応OSWindows 10 以降

シグネチャ

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

void D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
    const D2D_POINT_2F* pPoint0,
    const D2D_POINT_2F* pPoint1,
    const D2D_POINT_2F* pPoint2,
    const D2D_POINT_2F* pPoint3,
    const D2D_POINT_2F* pPoint4,
    const D2D_POINT_2F* pPoint5,
    const D2D_POINT_2F* pPoint6,
    const D2D_POINT_2F* pPoint7,
    const D2D_POINT_2F* pPoint8,
    const D2D_POINT_2F* pPoint9,
    const D2D_POINT_2F* pPoint10,
    const D2D_POINT_2F* pPoint11,
    D2D_POINT_2F* pTensorPoint11,
    D2D_POINT_2F* pTensorPoint12,
    D2D_POINT_2F* pTensorPoint21,
    D2D_POINT_2F* pTensorPoint22
);

パラメーター

名前方向説明
pPoint0D2D_POINT_2F*inクーンズパッチの境界制御点0(角)を示すD2D_POINT_2Fへのポインター。
pPoint1D2D_POINT_2F*inクーンズパッチの境界制御点1を示すD2D_POINT_2Fへのポインター。
pPoint2D2D_POINT_2F*inクーンズパッチの境界制御点2を示すD2D_POINT_2Fへのポインター。
pPoint3D2D_POINT_2F*inクーンズパッチの境界制御点3(角)を示すD2D_POINT_2Fへのポインター。
pPoint4D2D_POINT_2F*inクーンズパッチの境界制御点4を示すD2D_POINT_2Fへのポインター。
pPoint5D2D_POINT_2F*inクーンズパッチの境界制御点5を示すD2D_POINT_2Fへのポインター。
pPoint6D2D_POINT_2F*inクーンズパッチの境界制御点6(角)を示すD2D_POINT_2Fへのポインター。
pPoint7D2D_POINT_2F*inクーンズパッチの境界制御点7を示すD2D_POINT_2Fへのポインター。
pPoint8D2D_POINT_2F*inクーンズパッチの境界制御点8を示すD2D_POINT_2Fへのポインター。
pPoint9D2D_POINT_2F*inクーンズパッチの境界制御点9(角)を示すD2D_POINT_2Fへのポインター。
pPoint10D2D_POINT_2F*inクーンズパッチの境界制御点10を示すD2D_POINT_2Fへのポインター。
pPoint11D2D_POINT_2F*inクーンズパッチの境界制御点11を示すD2D_POINT_2Fへのポインター。
pTensorPoint11D2D_POINT_2F*out算出されたテンソルメッシュ内部点(1,1)を受け取るD2D_POINT_2Fへのポインター。
pTensorPoint12D2D_POINT_2F*out算出されたテンソルメッシュ内部点(1,2)を受け取るD2D_POINT_2Fへのポインター。
pTensorPoint21D2D_POINT_2F*out算出されたテンソルメッシュ内部点(2,1)を受け取るD2D_POINT_2Fへのポインター。
pTensorPoint22D2D_POINT_2F*out算出されたテンソルメッシュ内部点(2,2)を受け取るD2D_POINT_2Fへのポインター。

戻り値の型: void

各言語での呼び出し定義

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

void D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
    const D2D_POINT_2F* pPoint0,
    const D2D_POINT_2F* pPoint1,
    const D2D_POINT_2F* pPoint2,
    const D2D_POINT_2F* pPoint3,
    const D2D_POINT_2F* pPoint4,
    const D2D_POINT_2F* pPoint5,
    const D2D_POINT_2F* pPoint6,
    const D2D_POINT_2F* pPoint7,
    const D2D_POINT_2F* pPoint8,
    const D2D_POINT_2F* pPoint9,
    const D2D_POINT_2F* pPoint10,
    const D2D_POINT_2F* pPoint11,
    D2D_POINT_2F* pTensorPoint11,
    D2D_POINT_2F* pTensorPoint12,
    D2D_POINT_2F* pTensorPoint21,
    D2D_POINT_2F* pTensorPoint22
);
[DllImport("d2d1.dll", ExactSpelling = true)]
static extern void D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
    IntPtr pPoint0,   // D2D_POINT_2F*
    IntPtr pPoint1,   // D2D_POINT_2F*
    IntPtr pPoint2,   // D2D_POINT_2F*
    IntPtr pPoint3,   // D2D_POINT_2F*
    IntPtr pPoint4,   // D2D_POINT_2F*
    IntPtr pPoint5,   // D2D_POINT_2F*
    IntPtr pPoint6,   // D2D_POINT_2F*
    IntPtr pPoint7,   // D2D_POINT_2F*
    IntPtr pPoint8,   // D2D_POINT_2F*
    IntPtr pPoint9,   // D2D_POINT_2F*
    IntPtr pPoint10,   // D2D_POINT_2F*
    IntPtr pPoint11,   // D2D_POINT_2F*
    IntPtr pTensorPoint11,   // D2D_POINT_2F* out
    IntPtr pTensorPoint12,   // D2D_POINT_2F* out
    IntPtr pTensorPoint21,   // D2D_POINT_2F* out
    IntPtr pTensorPoint22   // D2D_POINT_2F* out
);
<DllImport("d2d1.dll", ExactSpelling:=True)>
Public Shared Sub D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
    pPoint0 As IntPtr,   ' D2D_POINT_2F*
    pPoint1 As IntPtr,   ' D2D_POINT_2F*
    pPoint2 As IntPtr,   ' D2D_POINT_2F*
    pPoint3 As IntPtr,   ' D2D_POINT_2F*
    pPoint4 As IntPtr,   ' D2D_POINT_2F*
    pPoint5 As IntPtr,   ' D2D_POINT_2F*
    pPoint6 As IntPtr,   ' D2D_POINT_2F*
    pPoint7 As IntPtr,   ' D2D_POINT_2F*
    pPoint8 As IntPtr,   ' D2D_POINT_2F*
    pPoint9 As IntPtr,   ' D2D_POINT_2F*
    pPoint10 As IntPtr,   ' D2D_POINT_2F*
    pPoint11 As IntPtr,   ' D2D_POINT_2F*
    pTensorPoint11 As IntPtr,   ' D2D_POINT_2F* out
    pTensorPoint12 As IntPtr,   ' D2D_POINT_2F* out
    pTensorPoint21 As IntPtr,   ' D2D_POINT_2F* out
    pTensorPoint22 As IntPtr   ' D2D_POINT_2F* out
)
End Sub
' pPoint0 : D2D_POINT_2F*
' pPoint1 : D2D_POINT_2F*
' pPoint2 : D2D_POINT_2F*
' pPoint3 : D2D_POINT_2F*
' pPoint4 : D2D_POINT_2F*
' pPoint5 : D2D_POINT_2F*
' pPoint6 : D2D_POINT_2F*
' pPoint7 : D2D_POINT_2F*
' pPoint8 : D2D_POINT_2F*
' pPoint9 : D2D_POINT_2F*
' pPoint10 : D2D_POINT_2F*
' pPoint11 : D2D_POINT_2F*
' pTensorPoint11 : D2D_POINT_2F* out
' pTensorPoint12 : D2D_POINT_2F* out
' pTensorPoint21 : D2D_POINT_2F* out
' pTensorPoint22 : D2D_POINT_2F* out
Declare PtrSafe Sub D2D1GetGradientMeshInteriorPointsFromCoonsPatch Lib "d2d1" ( _
    ByVal pPoint0 As LongPtr, _
    ByVal pPoint1 As LongPtr, _
    ByVal pPoint2 As LongPtr, _
    ByVal pPoint3 As LongPtr, _
    ByVal pPoint4 As LongPtr, _
    ByVal pPoint5 As LongPtr, _
    ByVal pPoint6 As LongPtr, _
    ByVal pPoint7 As LongPtr, _
    ByVal pPoint8 As LongPtr, _
    ByVal pPoint9 As LongPtr, _
    ByVal pPoint10 As LongPtr, _
    ByVal pPoint11 As LongPtr, _
    ByVal pTensorPoint11 As LongPtr, _
    ByVal pTensorPoint12 As LongPtr, _
    ByVal pTensorPoint21 As LongPtr, _
    ByVal pTensorPoint22 As LongPtr)
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

D2D1GetGradientMeshInteriorPointsFromCoonsPatch = ctypes.windll.d2d1.D2D1GetGradientMeshInteriorPointsFromCoonsPatch
D2D1GetGradientMeshInteriorPointsFromCoonsPatch.restype = None
D2D1GetGradientMeshInteriorPointsFromCoonsPatch.argtypes = [
    ctypes.c_void_p,  # pPoint0 : D2D_POINT_2F*
    ctypes.c_void_p,  # pPoint1 : D2D_POINT_2F*
    ctypes.c_void_p,  # pPoint2 : D2D_POINT_2F*
    ctypes.c_void_p,  # pPoint3 : D2D_POINT_2F*
    ctypes.c_void_p,  # pPoint4 : D2D_POINT_2F*
    ctypes.c_void_p,  # pPoint5 : D2D_POINT_2F*
    ctypes.c_void_p,  # pPoint6 : D2D_POINT_2F*
    ctypes.c_void_p,  # pPoint7 : D2D_POINT_2F*
    ctypes.c_void_p,  # pPoint8 : D2D_POINT_2F*
    ctypes.c_void_p,  # pPoint9 : D2D_POINT_2F*
    ctypes.c_void_p,  # pPoint10 : D2D_POINT_2F*
    ctypes.c_void_p,  # pPoint11 : D2D_POINT_2F*
    ctypes.c_void_p,  # pTensorPoint11 : D2D_POINT_2F* out
    ctypes.c_void_p,  # pTensorPoint12 : D2D_POINT_2F* out
    ctypes.c_void_p,  # pTensorPoint21 : D2D_POINT_2F* out
    ctypes.c_void_p,  # pTensorPoint22 : D2D_POINT_2F* out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('d2d1.dll')
D2D1GetGradientMeshInteriorPointsFromCoonsPatch = Fiddle::Function.new(
  lib['D2D1GetGradientMeshInteriorPointsFromCoonsPatch'],
  [
    Fiddle::TYPE_VOIDP,  # pPoint0 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pPoint1 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pPoint2 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pPoint3 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pPoint4 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pPoint5 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pPoint6 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pPoint7 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pPoint8 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pPoint9 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pPoint10 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pPoint11 : D2D_POINT_2F*
    Fiddle::TYPE_VOIDP,  # pTensorPoint11 : D2D_POINT_2F* out
    Fiddle::TYPE_VOIDP,  # pTensorPoint12 : D2D_POINT_2F* out
    Fiddle::TYPE_VOIDP,  # pTensorPoint21 : D2D_POINT_2F* out
    Fiddle::TYPE_VOIDP,  # pTensorPoint22 : D2D_POINT_2F* out
  ],
  Fiddle::TYPE_VOID)
#[link(name = "d2d1")]
extern "system" {
    fn D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
        pPoint0: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pPoint1: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pPoint2: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pPoint3: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pPoint4: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pPoint5: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pPoint6: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pPoint7: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pPoint8: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pPoint9: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pPoint10: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pPoint11: *const D2D_POINT_2F,  // D2D_POINT_2F*
        pTensorPoint11: *mut D2D_POINT_2F,  // D2D_POINT_2F* out
        pTensorPoint12: *mut D2D_POINT_2F,  // D2D_POINT_2F* out
        pTensorPoint21: *mut D2D_POINT_2F,  // D2D_POINT_2F* out
        pTensorPoint22: *mut D2D_POINT_2F  // D2D_POINT_2F* out
    );
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("d2d1.dll")]
public static extern void D2D1GetGradientMeshInteriorPointsFromCoonsPatch(IntPtr pPoint0, IntPtr pPoint1, IntPtr pPoint2, IntPtr pPoint3, IntPtr pPoint4, IntPtr pPoint5, IntPtr pPoint6, IntPtr pPoint7, IntPtr pPoint8, IntPtr pPoint9, IntPtr pPoint10, IntPtr pPoint11, IntPtr pTensorPoint11, IntPtr pTensorPoint12, IntPtr pTensorPoint21, IntPtr pTensorPoint22);
"@
$api = Add-Type -MemberDefinition $sig -Name 'd2d1_D2D1GetGradientMeshInteriorPointsFromCoonsPatch' -Namespace Win32 -PassThru
# $api::D2D1GetGradientMeshInteriorPointsFromCoonsPatch(pPoint0, pPoint1, pPoint2, pPoint3, pPoint4, pPoint5, pPoint6, pPoint7, pPoint8, pPoint9, pPoint10, pPoint11, pTensorPoint11, pTensorPoint12, pTensorPoint21, pTensorPoint22)
#uselib "d2d1.dll"
#func global D2D1GetGradientMeshInteriorPointsFromCoonsPatch "D2D1GetGradientMeshInteriorPointsFromCoonsPatch" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; D2D1GetGradientMeshInteriorPointsFromCoonsPatch varptr(pPoint0), varptr(pPoint1), varptr(pPoint2), varptr(pPoint3), varptr(pPoint4), varptr(pPoint5), varptr(pPoint6), varptr(pPoint7), varptr(pPoint8), varptr(pPoint9), varptr(pPoint10), varptr(pPoint11), varptr(pTensorPoint11), varptr(pTensorPoint12), varptr(pTensorPoint21), varptr(pTensorPoint22)
; pPoint0 : D2D_POINT_2F* -> "sptr"
; pPoint1 : D2D_POINT_2F* -> "sptr"
; pPoint2 : D2D_POINT_2F* -> "sptr"
; pPoint3 : D2D_POINT_2F* -> "sptr"
; pPoint4 : D2D_POINT_2F* -> "sptr"
; pPoint5 : D2D_POINT_2F* -> "sptr"
; pPoint6 : D2D_POINT_2F* -> "sptr"
; pPoint7 : D2D_POINT_2F* -> "sptr"
; pPoint8 : D2D_POINT_2F* -> "sptr"
; pPoint9 : D2D_POINT_2F* -> "sptr"
; pPoint10 : D2D_POINT_2F* -> "sptr"
; pPoint11 : D2D_POINT_2F* -> "sptr"
; pTensorPoint11 : D2D_POINT_2F* out -> "sptr"
; pTensorPoint12 : D2D_POINT_2F* out -> "sptr"
; pTensorPoint21 : D2D_POINT_2F* out -> "sptr"
; pTensorPoint22 : D2D_POINT_2F* out -> "sptr"
出力引数:
#uselib "d2d1.dll"
#func global D2D1GetGradientMeshInteriorPointsFromCoonsPatch "D2D1GetGradientMeshInteriorPointsFromCoonsPatch" var, var, var, var, var, var, var, var, var, var, var, var, var, var, var, var
; D2D1GetGradientMeshInteriorPointsFromCoonsPatch pPoint0, pPoint1, pPoint2, pPoint3, pPoint4, pPoint5, pPoint6, pPoint7, pPoint8, pPoint9, pPoint10, pPoint11, pTensorPoint11, pTensorPoint12, pTensorPoint21, pTensorPoint22
; pPoint0 : D2D_POINT_2F* -> "var"
; pPoint1 : D2D_POINT_2F* -> "var"
; pPoint2 : D2D_POINT_2F* -> "var"
; pPoint3 : D2D_POINT_2F* -> "var"
; pPoint4 : D2D_POINT_2F* -> "var"
; pPoint5 : D2D_POINT_2F* -> "var"
; pPoint6 : D2D_POINT_2F* -> "var"
; pPoint7 : D2D_POINT_2F* -> "var"
; pPoint8 : D2D_POINT_2F* -> "var"
; pPoint9 : D2D_POINT_2F* -> "var"
; pPoint10 : D2D_POINT_2F* -> "var"
; pPoint11 : D2D_POINT_2F* -> "var"
; pTensorPoint11 : D2D_POINT_2F* out -> "var"
; pTensorPoint12 : D2D_POINT_2F* out -> "var"
; pTensorPoint21 : D2D_POINT_2F* out -> "var"
; pTensorPoint22 : D2D_POINT_2F* out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; void D2D1GetGradientMeshInteriorPointsFromCoonsPatch(D2D_POINT_2F* pPoint0, D2D_POINT_2F* pPoint1, D2D_POINT_2F* pPoint2, D2D_POINT_2F* pPoint3, D2D_POINT_2F* pPoint4, D2D_POINT_2F* pPoint5, D2D_POINT_2F* pPoint6, D2D_POINT_2F* pPoint7, D2D_POINT_2F* pPoint8, D2D_POINT_2F* pPoint9, D2D_POINT_2F* pPoint10, D2D_POINT_2F* pPoint11, D2D_POINT_2F* pTensorPoint11, D2D_POINT_2F* pTensorPoint12, D2D_POINT_2F* pTensorPoint21, D2D_POINT_2F* pTensorPoint22)
#uselib "d2d1.dll"
#func global D2D1GetGradientMeshInteriorPointsFromCoonsPatch "D2D1GetGradientMeshInteriorPointsFromCoonsPatch" var, var, var, var, var, var, var, var, var, var, var, var, var, var, var, var
; D2D1GetGradientMeshInteriorPointsFromCoonsPatch pPoint0, pPoint1, pPoint2, pPoint3, pPoint4, pPoint5, pPoint6, pPoint7, pPoint8, pPoint9, pPoint10, pPoint11, pTensorPoint11, pTensorPoint12, pTensorPoint21, pTensorPoint22
; pPoint0 : D2D_POINT_2F* -> "var"
; pPoint1 : D2D_POINT_2F* -> "var"
; pPoint2 : D2D_POINT_2F* -> "var"
; pPoint3 : D2D_POINT_2F* -> "var"
; pPoint4 : D2D_POINT_2F* -> "var"
; pPoint5 : D2D_POINT_2F* -> "var"
; pPoint6 : D2D_POINT_2F* -> "var"
; pPoint7 : D2D_POINT_2F* -> "var"
; pPoint8 : D2D_POINT_2F* -> "var"
; pPoint9 : D2D_POINT_2F* -> "var"
; pPoint10 : D2D_POINT_2F* -> "var"
; pPoint11 : D2D_POINT_2F* -> "var"
; pTensorPoint11 : D2D_POINT_2F* out -> "var"
; pTensorPoint12 : D2D_POINT_2F* out -> "var"
; pTensorPoint21 : D2D_POINT_2F* out -> "var"
; pTensorPoint22 : D2D_POINT_2F* out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	d2d1 = windows.NewLazySystemDLL("d2d1.dll")
	procD2D1GetGradientMeshInteriorPointsFromCoonsPatch = d2d1.NewProc("D2D1GetGradientMeshInteriorPointsFromCoonsPatch")
)

// pPoint0 (D2D_POINT_2F*), pPoint1 (D2D_POINT_2F*), pPoint2 (D2D_POINT_2F*), pPoint3 (D2D_POINT_2F*), pPoint4 (D2D_POINT_2F*), pPoint5 (D2D_POINT_2F*), pPoint6 (D2D_POINT_2F*), pPoint7 (D2D_POINT_2F*), pPoint8 (D2D_POINT_2F*), pPoint9 (D2D_POINT_2F*), pPoint10 (D2D_POINT_2F*), pPoint11 (D2D_POINT_2F*), pTensorPoint11 (D2D_POINT_2F* out), pTensorPoint12 (D2D_POINT_2F* out), pTensorPoint21 (D2D_POINT_2F* out), pTensorPoint22 (D2D_POINT_2F* out)
r1, _, err := procD2D1GetGradientMeshInteriorPointsFromCoonsPatch.Call(
	uintptr(pPoint0),
	uintptr(pPoint1),
	uintptr(pPoint2),
	uintptr(pPoint3),
	uintptr(pPoint4),
	uintptr(pPoint5),
	uintptr(pPoint6),
	uintptr(pPoint7),
	uintptr(pPoint8),
	uintptr(pPoint9),
	uintptr(pPoint10),
	uintptr(pPoint11),
	uintptr(pTensorPoint11),
	uintptr(pTensorPoint12),
	uintptr(pTensorPoint21),
	uintptr(pTensorPoint22),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // void
procedure D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
  pPoint0: Pointer;   // D2D_POINT_2F*
  pPoint1: Pointer;   // D2D_POINT_2F*
  pPoint2: Pointer;   // D2D_POINT_2F*
  pPoint3: Pointer;   // D2D_POINT_2F*
  pPoint4: Pointer;   // D2D_POINT_2F*
  pPoint5: Pointer;   // D2D_POINT_2F*
  pPoint6: Pointer;   // D2D_POINT_2F*
  pPoint7: Pointer;   // D2D_POINT_2F*
  pPoint8: Pointer;   // D2D_POINT_2F*
  pPoint9: Pointer;   // D2D_POINT_2F*
  pPoint10: Pointer;   // D2D_POINT_2F*
  pPoint11: Pointer;   // D2D_POINT_2F*
  pTensorPoint11: Pointer;   // D2D_POINT_2F* out
  pTensorPoint12: Pointer;   // D2D_POINT_2F* out
  pTensorPoint21: Pointer;   // D2D_POINT_2F* out
  pTensorPoint22: Pointer   // D2D_POINT_2F* out
); stdcall;
  external 'd2d1.dll' name 'D2D1GetGradientMeshInteriorPointsFromCoonsPatch';
result := DllCall("d2d1\D2D1GetGradientMeshInteriorPointsFromCoonsPatch"
    , "Ptr", pPoint0   ; D2D_POINT_2F*
    , "Ptr", pPoint1   ; D2D_POINT_2F*
    , "Ptr", pPoint2   ; D2D_POINT_2F*
    , "Ptr", pPoint3   ; D2D_POINT_2F*
    , "Ptr", pPoint4   ; D2D_POINT_2F*
    , "Ptr", pPoint5   ; D2D_POINT_2F*
    , "Ptr", pPoint6   ; D2D_POINT_2F*
    , "Ptr", pPoint7   ; D2D_POINT_2F*
    , "Ptr", pPoint8   ; D2D_POINT_2F*
    , "Ptr", pPoint9   ; D2D_POINT_2F*
    , "Ptr", pPoint10   ; D2D_POINT_2F*
    , "Ptr", pPoint11   ; D2D_POINT_2F*
    , "Ptr", pTensorPoint11   ; D2D_POINT_2F* out
    , "Ptr", pTensorPoint12   ; D2D_POINT_2F* out
    , "Ptr", pTensorPoint21   ; D2D_POINT_2F* out
    , "Ptr", pTensorPoint22   ; D2D_POINT_2F* out
    , "Int")   ; return: void
●D2D1GetGradientMeshInteriorPointsFromCoonsPatch(pPoint0, pPoint1, pPoint2, pPoint3, pPoint4, pPoint5, pPoint6, pPoint7, pPoint8, pPoint9, pPoint10, pPoint11, pTensorPoint11, pTensorPoint12, pTensorPoint21, pTensorPoint22) = DLL("d2d1.dll", "int D2D1GetGradientMeshInteriorPointsFromCoonsPatch(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*)")
# 呼び出し: D2D1GetGradientMeshInteriorPointsFromCoonsPatch(pPoint0, pPoint1, pPoint2, pPoint3, pPoint4, pPoint5, pPoint6, pPoint7, pPoint8, pPoint9, pPoint10, pPoint11, pTensorPoint11, pTensorPoint12, pTensorPoint21, pTensorPoint22)
# pPoint0 : D2D_POINT_2F* -> "void*"
# pPoint1 : D2D_POINT_2F* -> "void*"
# pPoint2 : D2D_POINT_2F* -> "void*"
# pPoint3 : D2D_POINT_2F* -> "void*"
# pPoint4 : D2D_POINT_2F* -> "void*"
# pPoint5 : D2D_POINT_2F* -> "void*"
# pPoint6 : D2D_POINT_2F* -> "void*"
# pPoint7 : D2D_POINT_2F* -> "void*"
# pPoint8 : D2D_POINT_2F* -> "void*"
# pPoint9 : D2D_POINT_2F* -> "void*"
# pPoint10 : D2D_POINT_2F* -> "void*"
# pPoint11 : D2D_POINT_2F* -> "void*"
# pTensorPoint11 : D2D_POINT_2F* out -> "void*"
# pTensorPoint12 : D2D_POINT_2F* out -> "void*"
# pTensorPoint21 : D2D_POINT_2F* out -> "void*"
# pTensorPoint22 : D2D_POINT_2F* out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "d2d1" fn D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
    pPoint0: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pPoint1: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pPoint2: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pPoint3: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pPoint4: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pPoint5: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pPoint6: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pPoint7: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pPoint8: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pPoint9: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pPoint10: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pPoint11: [*c]D2D_POINT_2F, // D2D_POINT_2F*
    pTensorPoint11: [*c]D2D_POINT_2F, // D2D_POINT_2F* out
    pTensorPoint12: [*c]D2D_POINT_2F, // D2D_POINT_2F* out
    pTensorPoint21: [*c]D2D_POINT_2F, // D2D_POINT_2F* out
    pTensorPoint22: [*c]D2D_POINT_2F // D2D_POINT_2F* out
) callconv(std.os.windows.WINAPI) void;
proc D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
    pPoint0: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pPoint1: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pPoint2: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pPoint3: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pPoint4: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pPoint5: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pPoint6: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pPoint7: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pPoint8: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pPoint9: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pPoint10: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pPoint11: ptr D2D_POINT_2F,  # D2D_POINT_2F*
    pTensorPoint11: ptr D2D_POINT_2F,  # D2D_POINT_2F* out
    pTensorPoint12: ptr D2D_POINT_2F,  # D2D_POINT_2F* out
    pTensorPoint21: ptr D2D_POINT_2F,  # D2D_POINT_2F* out
    pTensorPoint22: ptr D2D_POINT_2F  # D2D_POINT_2F* out
) {.importc: "D2D1GetGradientMeshInteriorPointsFromCoonsPatch", stdcall, dynlib: "d2d1.dll".}
pragma(lib, "d2d1");
extern(Windows)
void D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
    D2D_POINT_2F* pPoint0,   // D2D_POINT_2F*
    D2D_POINT_2F* pPoint1,   // D2D_POINT_2F*
    D2D_POINT_2F* pPoint2,   // D2D_POINT_2F*
    D2D_POINT_2F* pPoint3,   // D2D_POINT_2F*
    D2D_POINT_2F* pPoint4,   // D2D_POINT_2F*
    D2D_POINT_2F* pPoint5,   // D2D_POINT_2F*
    D2D_POINT_2F* pPoint6,   // D2D_POINT_2F*
    D2D_POINT_2F* pPoint7,   // D2D_POINT_2F*
    D2D_POINT_2F* pPoint8,   // D2D_POINT_2F*
    D2D_POINT_2F* pPoint9,   // D2D_POINT_2F*
    D2D_POINT_2F* pPoint10,   // D2D_POINT_2F*
    D2D_POINT_2F* pPoint11,   // D2D_POINT_2F*
    D2D_POINT_2F* pTensorPoint11,   // D2D_POINT_2F* out
    D2D_POINT_2F* pTensorPoint12,   // D2D_POINT_2F* out
    D2D_POINT_2F* pTensorPoint21,   // D2D_POINT_2F* out
    D2D_POINT_2F* pTensorPoint22   // D2D_POINT_2F* out
);
ccall((:D2D1GetGradientMeshInteriorPointsFromCoonsPatch, "d2d1.dll"), stdcall, Cvoid,
      (Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}, Ptr{D2D_POINT_2F}),
      pPoint0, pPoint1, pPoint2, pPoint3, pPoint4, pPoint5, pPoint6, pPoint7, pPoint8, pPoint9, pPoint10, pPoint11, pTensorPoint11, pTensorPoint12, pTensorPoint21, pTensorPoint22)
# pPoint0 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pPoint1 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pPoint2 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pPoint3 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pPoint4 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pPoint5 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pPoint6 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pPoint7 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pPoint8 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pPoint9 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pPoint10 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pPoint11 : D2D_POINT_2F* -> Ptr{D2D_POINT_2F}
# pTensorPoint11 : D2D_POINT_2F* out -> Ptr{D2D_POINT_2F}
# pTensorPoint12 : D2D_POINT_2F* out -> Ptr{D2D_POINT_2F}
# pTensorPoint21 : D2D_POINT_2F* out -> Ptr{D2D_POINT_2F}
# pTensorPoint22 : D2D_POINT_2F* out -> Ptr{D2D_POINT_2F}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
void D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
    void* pPoint0,
    void* pPoint1,
    void* pPoint2,
    void* pPoint3,
    void* pPoint4,
    void* pPoint5,
    void* pPoint6,
    void* pPoint7,
    void* pPoint8,
    void* pPoint9,
    void* pPoint10,
    void* pPoint11,
    void* pTensorPoint11,
    void* pTensorPoint12,
    void* pTensorPoint21,
    void* pTensorPoint22);
]]
local d2d1 = ffi.load("d2d1")
-- d2d1.D2D1GetGradientMeshInteriorPointsFromCoonsPatch(pPoint0, pPoint1, pPoint2, pPoint3, pPoint4, pPoint5, pPoint6, pPoint7, pPoint8, pPoint9, pPoint10, pPoint11, pTensorPoint11, pTensorPoint12, pTensorPoint21, pTensorPoint22)
-- pPoint0 : D2D_POINT_2F*
-- pPoint1 : D2D_POINT_2F*
-- pPoint2 : D2D_POINT_2F*
-- pPoint3 : D2D_POINT_2F*
-- pPoint4 : D2D_POINT_2F*
-- pPoint5 : D2D_POINT_2F*
-- pPoint6 : D2D_POINT_2F*
-- pPoint7 : D2D_POINT_2F*
-- pPoint8 : D2D_POINT_2F*
-- pPoint9 : D2D_POINT_2F*
-- pPoint10 : D2D_POINT_2F*
-- pPoint11 : D2D_POINT_2F*
-- pTensorPoint11 : D2D_POINT_2F* out
-- pTensorPoint12 : D2D_POINT_2F* out
-- pTensorPoint21 : D2D_POINT_2F* out
-- pTensorPoint22 : D2D_POINT_2F* out
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('d2d1.dll');
const D2D1GetGradientMeshInteriorPointsFromCoonsPatch = lib.func('__stdcall', 'D2D1GetGradientMeshInteriorPointsFromCoonsPatch', 'void', ['void *', 'void *', 'void *', 'void *', 'void *', 'void *', 'void *', 'void *', 'void *', 'void *', 'void *', 'void *', 'void *', 'void *', 'void *', 'void *']);
// D2D1GetGradientMeshInteriorPointsFromCoonsPatch(pPoint0, pPoint1, pPoint2, pPoint3, pPoint4, pPoint5, pPoint6, pPoint7, pPoint8, pPoint9, pPoint10, pPoint11, pTensorPoint11, pTensorPoint12, pTensorPoint21, pTensorPoint22)
// pPoint0 : D2D_POINT_2F* -> 'void *'
// pPoint1 : D2D_POINT_2F* -> 'void *'
// pPoint2 : D2D_POINT_2F* -> 'void *'
// pPoint3 : D2D_POINT_2F* -> 'void *'
// pPoint4 : D2D_POINT_2F* -> 'void *'
// pPoint5 : D2D_POINT_2F* -> 'void *'
// pPoint6 : D2D_POINT_2F* -> 'void *'
// pPoint7 : D2D_POINT_2F* -> 'void *'
// pPoint8 : D2D_POINT_2F* -> 'void *'
// pPoint9 : D2D_POINT_2F* -> 'void *'
// pPoint10 : D2D_POINT_2F* -> 'void *'
// pPoint11 : D2D_POINT_2F* -> 'void *'
// pTensorPoint11 : D2D_POINT_2F* out -> 'void *'
// pTensorPoint12 : D2D_POINT_2F* out -> 'void *'
// pTensorPoint21 : D2D_POINT_2F* out -> 'void *'
// pTensorPoint22 : D2D_POINT_2F* out -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("d2d1.dll", {
  D2D1GetGradientMeshInteriorPointsFromCoonsPatch: { parameters: ["pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer"], result: "void" },
});
// lib.symbols.D2D1GetGradientMeshInteriorPointsFromCoonsPatch(pPoint0, pPoint1, pPoint2, pPoint3, pPoint4, pPoint5, pPoint6, pPoint7, pPoint8, pPoint9, pPoint10, pPoint11, pTensorPoint11, pTensorPoint12, pTensorPoint21, pTensorPoint22)
// pPoint0 : D2D_POINT_2F* -> "pointer"
// pPoint1 : D2D_POINT_2F* -> "pointer"
// pPoint2 : D2D_POINT_2F* -> "pointer"
// pPoint3 : D2D_POINT_2F* -> "pointer"
// pPoint4 : D2D_POINT_2F* -> "pointer"
// pPoint5 : D2D_POINT_2F* -> "pointer"
// pPoint6 : D2D_POINT_2F* -> "pointer"
// pPoint7 : D2D_POINT_2F* -> "pointer"
// pPoint8 : D2D_POINT_2F* -> "pointer"
// pPoint9 : D2D_POINT_2F* -> "pointer"
// pPoint10 : D2D_POINT_2F* -> "pointer"
// pPoint11 : D2D_POINT_2F* -> "pointer"
// pTensorPoint11 : D2D_POINT_2F* out -> "pointer"
// pTensorPoint12 : D2D_POINT_2F* out -> "pointer"
// pTensorPoint21 : D2D_POINT_2F* out -> "pointer"
// pTensorPoint22 : D2D_POINT_2F* out -> "pointer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
void D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
    void* pPoint0,
    void* pPoint1,
    void* pPoint2,
    void* pPoint3,
    void* pPoint4,
    void* pPoint5,
    void* pPoint6,
    void* pPoint7,
    void* pPoint8,
    void* pPoint9,
    void* pPoint10,
    void* pPoint11,
    void* pTensorPoint11,
    void* pTensorPoint12,
    void* pTensorPoint21,
    void* pTensorPoint22);
C, "d2d1.dll");
// $ffi->D2D1GetGradientMeshInteriorPointsFromCoonsPatch(pPoint0, pPoint1, pPoint2, pPoint3, pPoint4, pPoint5, pPoint6, pPoint7, pPoint8, pPoint9, pPoint10, pPoint11, pTensorPoint11, pTensorPoint12, pTensorPoint21, pTensorPoint22);
// pPoint0 : D2D_POINT_2F*
// pPoint1 : D2D_POINT_2F*
// pPoint2 : D2D_POINT_2F*
// pPoint3 : D2D_POINT_2F*
// pPoint4 : D2D_POINT_2F*
// pPoint5 : D2D_POINT_2F*
// pPoint6 : D2D_POINT_2F*
// pPoint7 : D2D_POINT_2F*
// pPoint8 : D2D_POINT_2F*
// pPoint9 : D2D_POINT_2F*
// pPoint10 : D2D_POINT_2F*
// pPoint11 : D2D_POINT_2F*
// pTensorPoint11 : D2D_POINT_2F* out
// pTensorPoint12 : D2D_POINT_2F* out
// pTensorPoint21 : D2D_POINT_2F* out
// pTensorPoint22 : D2D_POINT_2F* out
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;

public interface D2d1 extends StdCallLibrary {
    D2d1 INSTANCE = Native.load("d2d1", D2d1.class);
    void D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
        Pointer pPoint0,   // D2D_POINT_2F*
        Pointer pPoint1,   // D2D_POINT_2F*
        Pointer pPoint2,   // D2D_POINT_2F*
        Pointer pPoint3,   // D2D_POINT_2F*
        Pointer pPoint4,   // D2D_POINT_2F*
        Pointer pPoint5,   // D2D_POINT_2F*
        Pointer pPoint6,   // D2D_POINT_2F*
        Pointer pPoint7,   // D2D_POINT_2F*
        Pointer pPoint8,   // D2D_POINT_2F*
        Pointer pPoint9,   // D2D_POINT_2F*
        Pointer pPoint10,   // D2D_POINT_2F*
        Pointer pPoint11,   // D2D_POINT_2F*
        Pointer pTensorPoint11,   // D2D_POINT_2F* out
        Pointer pTensorPoint12,   // D2D_POINT_2F* out
        Pointer pTensorPoint21,   // D2D_POINT_2F* out
        Pointer pTensorPoint22   // D2D_POINT_2F* out
    );
}
@[Link("d2d1")]
lib Libd2d1
  fun D2D1GetGradientMeshInteriorPointsFromCoonsPatch = D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
    pPoint0 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pPoint1 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pPoint2 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pPoint3 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pPoint4 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pPoint5 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pPoint6 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pPoint7 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pPoint8 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pPoint9 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pPoint10 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pPoint11 : D2D_POINT_2F*,   # D2D_POINT_2F*
    pTensorPoint11 : D2D_POINT_2F*,   # D2D_POINT_2F* out
    pTensorPoint12 : D2D_POINT_2F*,   # D2D_POINT_2F* out
    pTensorPoint21 : D2D_POINT_2F*,   # D2D_POINT_2F* out
    pTensorPoint22 : D2D_POINT_2F*   # D2D_POINT_2F* out
  ) : Void
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef D2D1GetGradientMeshInteriorPointsFromCoonsPatchNative = Void Function(Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>);
typedef D2D1GetGradientMeshInteriorPointsFromCoonsPatchDart = void Function(Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Void>);
final D2D1GetGradientMeshInteriorPointsFromCoonsPatch = DynamicLibrary.open('d2d1.dll')
    .lookupFunction<D2D1GetGradientMeshInteriorPointsFromCoonsPatchNative, D2D1GetGradientMeshInteriorPointsFromCoonsPatchDart>('D2D1GetGradientMeshInteriorPointsFromCoonsPatch');
// pPoint0 : D2D_POINT_2F* -> Pointer<Void>
// pPoint1 : D2D_POINT_2F* -> Pointer<Void>
// pPoint2 : D2D_POINT_2F* -> Pointer<Void>
// pPoint3 : D2D_POINT_2F* -> Pointer<Void>
// pPoint4 : D2D_POINT_2F* -> Pointer<Void>
// pPoint5 : D2D_POINT_2F* -> Pointer<Void>
// pPoint6 : D2D_POINT_2F* -> Pointer<Void>
// pPoint7 : D2D_POINT_2F* -> Pointer<Void>
// pPoint8 : D2D_POINT_2F* -> Pointer<Void>
// pPoint9 : D2D_POINT_2F* -> Pointer<Void>
// pPoint10 : D2D_POINT_2F* -> Pointer<Void>
// pPoint11 : D2D_POINT_2F* -> Pointer<Void>
// pTensorPoint11 : D2D_POINT_2F* out -> Pointer<Void>
// pTensorPoint12 : D2D_POINT_2F* out -> Pointer<Void>
// pTensorPoint21 : D2D_POINT_2F* out -> Pointer<Void>
// pTensorPoint22 : D2D_POINT_2F* out -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
procedure D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
  pPoint0: Pointer;   // D2D_POINT_2F*
  pPoint1: Pointer;   // D2D_POINT_2F*
  pPoint2: Pointer;   // D2D_POINT_2F*
  pPoint3: Pointer;   // D2D_POINT_2F*
  pPoint4: Pointer;   // D2D_POINT_2F*
  pPoint5: Pointer;   // D2D_POINT_2F*
  pPoint6: Pointer;   // D2D_POINT_2F*
  pPoint7: Pointer;   // D2D_POINT_2F*
  pPoint8: Pointer;   // D2D_POINT_2F*
  pPoint9: Pointer;   // D2D_POINT_2F*
  pPoint10: Pointer;   // D2D_POINT_2F*
  pPoint11: Pointer;   // D2D_POINT_2F*
  pTensorPoint11: Pointer;   // D2D_POINT_2F* out
  pTensorPoint12: Pointer;   // D2D_POINT_2F* out
  pTensorPoint21: Pointer;   // D2D_POINT_2F* out
  pTensorPoint22: Pointer   // D2D_POINT_2F* out
); stdcall;
  external 'd2d1.dll' name 'D2D1GetGradientMeshInteriorPointsFromCoonsPatch';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "D2D1GetGradientMeshInteriorPointsFromCoonsPatch"
  c_D2D1GetGradientMeshInteriorPointsFromCoonsPatch :: Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> Ptr () -> IO ()
-- pPoint0 : D2D_POINT_2F* -> Ptr ()
-- pPoint1 : D2D_POINT_2F* -> Ptr ()
-- pPoint2 : D2D_POINT_2F* -> Ptr ()
-- pPoint3 : D2D_POINT_2F* -> Ptr ()
-- pPoint4 : D2D_POINT_2F* -> Ptr ()
-- pPoint5 : D2D_POINT_2F* -> Ptr ()
-- pPoint6 : D2D_POINT_2F* -> Ptr ()
-- pPoint7 : D2D_POINT_2F* -> Ptr ()
-- pPoint8 : D2D_POINT_2F* -> Ptr ()
-- pPoint9 : D2D_POINT_2F* -> Ptr ()
-- pPoint10 : D2D_POINT_2F* -> Ptr ()
-- pPoint11 : D2D_POINT_2F* -> Ptr ()
-- pTensorPoint11 : D2D_POINT_2F* out -> Ptr ()
-- pTensorPoint12 : D2D_POINT_2F* out -> Ptr ()
-- pTensorPoint21 : D2D_POINT_2F* out -> Ptr ()
-- pTensorPoint22 : D2D_POINT_2F* out -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let d2d1getgradientmeshinteriorpointsfromcoonspatch =
  foreign "D2D1GetGradientMeshInteriorPointsFromCoonsPatch"
    ((ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> returning void)
(* pPoint0 : D2D_POINT_2F* -> (ptr void) *)
(* pPoint1 : D2D_POINT_2F* -> (ptr void) *)
(* pPoint2 : D2D_POINT_2F* -> (ptr void) *)
(* pPoint3 : D2D_POINT_2F* -> (ptr void) *)
(* pPoint4 : D2D_POINT_2F* -> (ptr void) *)
(* pPoint5 : D2D_POINT_2F* -> (ptr void) *)
(* pPoint6 : D2D_POINT_2F* -> (ptr void) *)
(* pPoint7 : D2D_POINT_2F* -> (ptr void) *)
(* pPoint8 : D2D_POINT_2F* -> (ptr void) *)
(* pPoint9 : D2D_POINT_2F* -> (ptr void) *)
(* pPoint10 : D2D_POINT_2F* -> (ptr void) *)
(* pPoint11 : D2D_POINT_2F* -> (ptr void) *)
(* pTensorPoint11 : D2D_POINT_2F* out -> (ptr void) *)
(* pTensorPoint12 : D2D_POINT_2F* out -> (ptr void) *)
(* pTensorPoint21 : D2D_POINT_2F* out -> (ptr void) *)
(* pTensorPoint22 : D2D_POINT_2F* out -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library d2d1 (t "d2d1.dll"))
(cffi:use-foreign-library d2d1)

(cffi:defcfun ("D2D1GetGradientMeshInteriorPointsFromCoonsPatch" d2-d1-get-gradient-mesh-interior-points-from-coons-patch :convention :stdcall) :void
  (p-point0 :pointer)   ; D2D_POINT_2F*
  (p-point1 :pointer)   ; D2D_POINT_2F*
  (p-point2 :pointer)   ; D2D_POINT_2F*
  (p-point3 :pointer)   ; D2D_POINT_2F*
  (p-point4 :pointer)   ; D2D_POINT_2F*
  (p-point5 :pointer)   ; D2D_POINT_2F*
  (p-point6 :pointer)   ; D2D_POINT_2F*
  (p-point7 :pointer)   ; D2D_POINT_2F*
  (p-point8 :pointer)   ; D2D_POINT_2F*
  (p-point9 :pointer)   ; D2D_POINT_2F*
  (p-point10 :pointer)   ; D2D_POINT_2F*
  (p-point11 :pointer)   ; D2D_POINT_2F*
  (p-tensor-point11 :pointer)   ; D2D_POINT_2F* out
  (p-tensor-point12 :pointer)   ; D2D_POINT_2F* out
  (p-tensor-point21 :pointer)   ; D2D_POINT_2F* out
  (p-tensor-point22 :pointer))   ; D2D_POINT_2F* out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $D2D1GetGradientMeshInteriorPointsFromCoonsPatch = Win32::API::More->new('d2d1',
    'void D2D1GetGradientMeshInteriorPointsFromCoonsPatch(LPVOID pPoint0, LPVOID pPoint1, LPVOID pPoint2, LPVOID pPoint3, LPVOID pPoint4, LPVOID pPoint5, LPVOID pPoint6, LPVOID pPoint7, LPVOID pPoint8, LPVOID pPoint9, LPVOID pPoint10, LPVOID pPoint11, LPVOID pTensorPoint11, LPVOID pTensorPoint12, LPVOID pTensorPoint21, LPVOID pTensorPoint22)');
# my $ret = $D2D1GetGradientMeshInteriorPointsFromCoonsPatch->Call($pPoint0, $pPoint1, $pPoint2, $pPoint3, $pPoint4, $pPoint5, $pPoint6, $pPoint7, $pPoint8, $pPoint9, $pPoint10, $pPoint11, $pTensorPoint11, $pTensorPoint12, $pTensorPoint21, $pTensorPoint22);
# pPoint0 : D2D_POINT_2F* -> LPVOID
# pPoint1 : D2D_POINT_2F* -> LPVOID
# pPoint2 : D2D_POINT_2F* -> LPVOID
# pPoint3 : D2D_POINT_2F* -> LPVOID
# pPoint4 : D2D_POINT_2F* -> LPVOID
# pPoint5 : D2D_POINT_2F* -> LPVOID
# pPoint6 : D2D_POINT_2F* -> LPVOID
# pPoint7 : D2D_POINT_2F* -> LPVOID
# pPoint8 : D2D_POINT_2F* -> LPVOID
# pPoint9 : D2D_POINT_2F* -> LPVOID
# pPoint10 : D2D_POINT_2F* -> LPVOID
# pPoint11 : D2D_POINT_2F* -> LPVOID
# pTensorPoint11 : D2D_POINT_2F* out -> LPVOID
# pTensorPoint12 : D2D_POINT_2F* out -> LPVOID
# pTensorPoint21 : D2D_POINT_2F* out -> LPVOID
# pTensorPoint22 : D2D_POINT_2F* out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

使用する型