ホーム › Media.Multimedia › ICDrawBegin
ICDrawBegin
関数映像フレームの描画準備を開始する。
シグネチャ
// MSVFW32.dll
#include <windows.h>
DWORD ICDrawBegin(
HIC hic,
DWORD dwFlags,
HPALETTE hpal, // optional
HWND hwnd, // optional
HDC hdc, // optional
INT xDst,
INT yDst,
INT dxDst,
INT dyDst,
BITMAPINFOHEADER* lpbi,
INT xSrc,
INT ySrc,
INT dxSrc,
INT dySrc,
DWORD dwRate,
DWORD dwScale
);パラメーター
| 名前 | 型 | 方向 | 説明 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hic | HIC | in | 使用するデコンプレッサーへのハンドル。 | ||||||||||||||||
| dwFlags | DWORD | in | 展開フラグ。次の値が定義されています。
| ||||||||||||||||
| hpal | HPALETTE | inoptional | 描画に使用するパレットへのハンドル。 | ||||||||||||||||
| hwnd | HWND | inoptional | 描画に使用するウィンドウへのハンドル。 | ||||||||||||||||
| hdc | HDC | inoptional | 描画に使用する DC。 | ||||||||||||||||
| xDst | INT | in | 描画先矩形の右上隅の x 座標。 | ||||||||||||||||
| yDst | INT | in | 描画先矩形の右上隅の y 座標。 | ||||||||||||||||
| dxDst | INT | in | 描画先矩形の幅。 | ||||||||||||||||
| dyDst | INT | in | 描画先矩形の高さ。 | ||||||||||||||||
| lpbi | BITMAPINFOHEADER* | in | 展開する入力データの形式を格納した BITMAPINFOHEADER 構造体へのポインター。 | ||||||||||||||||
| xSrc | INT | in | ソース矩形の右上隅の x 座標。 | ||||||||||||||||
| ySrc | INT | in | ソース矩形の右上隅の y 座標。 | ||||||||||||||||
| dxSrc | INT | in | ソース矩形の幅。 | ||||||||||||||||
| dySrc | INT | in | ソース矩形の高さ。 | ||||||||||||||||
| dwRate | DWORD | in | フレームレートの分子。1 秒あたりのフレーム数で表したフレームレートは、dwRate を dwScale で割ることで得られます。 | ||||||||||||||||
| dwScale | DWORD | in | フレームレートの分母。1 秒あたりのフレーム数で表したフレームレートは、dwRate を dwScale で割ることで得られます。 |
戻り値の型: DWORD
公式ドキュメント
ICDrawBegin 関数は、レンダラーを初期化し、描画先を描画用に準備します。
戻り値
レンダラーがデータを展開できる場合は ICERR_OK を返し、そうでない場合は ICERR_UNSUPPORTED を返します。
解説(Remarks)
ICDRAW_HDC フラグと ICDRAW_FULLSCREEN フラグは相互排他的です。アプリケーションが dwFlags に ICDRAW_HDC フラグを設定した場合、デコンプレッサーは hwnd、hdc、および描画先矩形を定義するパラメーター(xDst、yDst、dxDst、dyDst)を使用します。アプリケーションはこれらのパラメーターに描画先矩形のサイズを設定する必要があります。描画先矩形の値は、現在のウィンドウまたは DC を基準に指定します。
アプリケーションが dwFlags に ICDRAW_FULLSCREEN フラグを設定した場合、hwnd および hdc パラメーターは使用されず、NULL に設定する必要があります。また、描画先矩形は使用されず、そのパラメーターは 0 に設定できます。
ソース矩形はビデオフレーム全体を基準とします。ソース矩形で指定されたビデオフレームの部分は、描画先矩形に合わせて拡大または縮小されます。
dwRate および dwScale パラメーターは展開レートを指定します。dwRate に指定した整数値を dwScale に指定した整数値で割った値が、1 秒あたりのフレーム数で表したフレームレートを定義します。この値は、再生中のフレームのタイミングをレンダラーが担当する場合に使用されます。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// MSVFW32.dll
#include <windows.h>
DWORD ICDrawBegin(
HIC hic,
DWORD dwFlags,
HPALETTE hpal, // optional
HWND hwnd, // optional
HDC hdc, // optional
INT xDst,
INT yDst,
INT dxDst,
INT dyDst,
BITMAPINFOHEADER* lpbi,
INT xSrc,
INT ySrc,
INT dxSrc,
INT dySrc,
DWORD dwRate,
DWORD dwScale
);[DllImport("MSVFW32.dll", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
static extern uint ICDrawBegin(
IntPtr hic, // HIC
uint dwFlags, // DWORD
IntPtr hpal, // HPALETTE optional
IntPtr hwnd, // HWND optional
IntPtr hdc, // HDC optional
int xDst, // INT
int yDst, // INT
int dxDst, // INT
int dyDst, // INT
IntPtr lpbi, // BITMAPINFOHEADER*
int xSrc, // INT
int ySrc, // INT
int dxSrc, // INT
int dySrc, // INT
uint dwRate, // DWORD
uint dwScale // DWORD
);<DllImport("MSVFW32.dll", ExactSpelling:=True, CallingConvention:=CallingConvention.Cdecl)>
Public Shared Function ICDrawBegin(
hic As IntPtr, ' HIC
dwFlags As UInteger, ' DWORD
hpal As IntPtr, ' HPALETTE optional
hwnd As IntPtr, ' HWND optional
hdc As IntPtr, ' HDC optional
xDst As Integer, ' INT
yDst As Integer, ' INT
dxDst As Integer, ' INT
dyDst As Integer, ' INT
lpbi As IntPtr, ' BITMAPINFOHEADER*
xSrc As Integer, ' INT
ySrc As Integer, ' INT
dxSrc As Integer, ' INT
dySrc As Integer, ' INT
dwRate As UInteger, ' DWORD
dwScale As UInteger ' DWORD
) As UInteger
End Function' hic : HIC
' dwFlags : DWORD
' hpal : HPALETTE optional
' hwnd : HWND optional
' hdc : HDC optional
' xDst : INT
' yDst : INT
' dxDst : INT
' dyDst : INT
' lpbi : BITMAPINFOHEADER*
' xSrc : INT
' ySrc : INT
' dxSrc : INT
' dySrc : INT
' dwRate : DWORD
' dwScale : DWORD
Declare PtrSafe Function ICDrawBegin Lib "msvfw32" ( _
ByVal hic As LongPtr, _
ByVal dwFlags As Long, _
ByVal hpal As LongPtr, _
ByVal hwnd As LongPtr, _
ByVal hdc As LongPtr, _
ByVal xDst As Long, _
ByVal yDst As Long, _
ByVal dxDst As Long, _
ByVal dyDst As Long, _
ByVal lpbi As LongPtr, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal dxSrc As Long, _
ByVal dySrc As Long, _
ByVal dwRate As Long, _
ByVal dwScale As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
ICDrawBegin = ctypes.cdll.msvfw32.ICDrawBegin
ICDrawBegin.restype = wintypes.DWORD
ICDrawBegin.argtypes = [
wintypes.HANDLE, # hic : HIC
wintypes.DWORD, # dwFlags : DWORD
wintypes.HANDLE, # hpal : HPALETTE optional
wintypes.HANDLE, # hwnd : HWND optional
wintypes.HANDLE, # hdc : HDC optional
ctypes.c_int, # xDst : INT
ctypes.c_int, # yDst : INT
ctypes.c_int, # dxDst : INT
ctypes.c_int, # dyDst : INT
ctypes.c_void_p, # lpbi : BITMAPINFOHEADER*
ctypes.c_int, # xSrc : INT
ctypes.c_int, # ySrc : INT
ctypes.c_int, # dxSrc : INT
ctypes.c_int, # dySrc : INT
wintypes.DWORD, # dwRate : DWORD
wintypes.DWORD, # dwScale : DWORD
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('MSVFW32.dll')
ICDrawBegin = Fiddle::Function.new(
lib['ICDrawBegin'],
[
Fiddle::TYPE_VOIDP, # hic : HIC
-Fiddle::TYPE_INT, # dwFlags : DWORD
Fiddle::TYPE_VOIDP, # hpal : HPALETTE optional
Fiddle::TYPE_VOIDP, # hwnd : HWND optional
Fiddle::TYPE_VOIDP, # hdc : HDC optional
Fiddle::TYPE_INT, # xDst : INT
Fiddle::TYPE_INT, # yDst : INT
Fiddle::TYPE_INT, # dxDst : INT
Fiddle::TYPE_INT, # dyDst : INT
Fiddle::TYPE_VOIDP, # lpbi : BITMAPINFOHEADER*
Fiddle::TYPE_INT, # xSrc : INT
Fiddle::TYPE_INT, # ySrc : INT
Fiddle::TYPE_INT, # dxSrc : INT
Fiddle::TYPE_INT, # dySrc : INT
-Fiddle::TYPE_INT, # dwRate : DWORD
-Fiddle::TYPE_INT, # dwScale : DWORD
],
-Fiddle::TYPE_INT, Fiddle::Function::CDECL)#[link(name = "msvfw32")]
extern "C" {
fn ICDrawBegin(
hic: *mut core::ffi::c_void, // HIC
dwFlags: u32, // DWORD
hpal: *mut core::ffi::c_void, // HPALETTE optional
hwnd: *mut core::ffi::c_void, // HWND optional
hdc: *mut core::ffi::c_void, // HDC optional
xDst: i32, // INT
yDst: i32, // INT
dxDst: i32, // INT
dyDst: i32, // INT
lpbi: *mut BITMAPINFOHEADER, // BITMAPINFOHEADER*
xSrc: i32, // INT
ySrc: i32, // INT
dxSrc: i32, // INT
dySrc: i32, // INT
dwRate: u32, // DWORD
dwScale: u32 // DWORD
) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("MSVFW32.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern uint ICDrawBegin(IntPtr hic, uint dwFlags, IntPtr hpal, IntPtr hwnd, IntPtr hdc, int xDst, int yDst, int dxDst, int dyDst, IntPtr lpbi, int xSrc, int ySrc, int dxSrc, int dySrc, uint dwRate, uint dwScale);
"@
$api = Add-Type -MemberDefinition $sig -Name 'MSVFW32_ICDrawBegin' -Namespace Win32 -PassThru
# $api::ICDrawBegin(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale)#uselib "MSVFW32.dll"
#func global ICDrawBegin "ICDrawBegin" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; ICDrawBegin hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, varptr(lpbi), xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale ; 戻り値は stat
; hic : HIC -> "sptr"
; dwFlags : DWORD -> "sptr"
; hpal : HPALETTE optional -> "sptr"
; hwnd : HWND optional -> "sptr"
; hdc : HDC optional -> "sptr"
; xDst : INT -> "sptr"
; yDst : INT -> "sptr"
; dxDst : INT -> "sptr"
; dyDst : INT -> "sptr"
; lpbi : BITMAPINFOHEADER* -> "sptr"
; xSrc : INT -> "sptr"
; ySrc : INT -> "sptr"
; dxSrc : INT -> "sptr"
; dySrc : INT -> "sptr"
; dwRate : DWORD -> "sptr"
; dwScale : DWORD -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。出力引数:
#uselib "MSVFW32.dll" #cfunc global ICDrawBegin "ICDrawBegin" sptr, int, sptr, sptr, sptr, int, int, int, int, var, int, int, int, int, int, int ; res = ICDrawBegin(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale) ; hic : HIC -> "sptr" ; dwFlags : DWORD -> "int" ; hpal : HPALETTE optional -> "sptr" ; hwnd : HWND optional -> "sptr" ; hdc : HDC optional -> "sptr" ; xDst : INT -> "int" ; yDst : INT -> "int" ; dxDst : INT -> "int" ; dyDst : INT -> "int" ; lpbi : BITMAPINFOHEADER* -> "var" ; xSrc : INT -> "int" ; ySrc : INT -> "int" ; dxSrc : INT -> "int" ; dySrc : INT -> "int" ; dwRate : DWORD -> "int" ; dwScale : DWORD -> "int" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "MSVFW32.dll" #cfunc global ICDrawBegin "ICDrawBegin" sptr, int, sptr, sptr, sptr, int, int, int, int, sptr, int, int, int, int, int, int ; res = ICDrawBegin(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, varptr(lpbi), xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale) ; hic : HIC -> "sptr" ; dwFlags : DWORD -> "int" ; hpal : HPALETTE optional -> "sptr" ; hwnd : HWND optional -> "sptr" ; hdc : HDC optional -> "sptr" ; xDst : INT -> "int" ; yDst : INT -> "int" ; dxDst : INT -> "int" ; dyDst : INT -> "int" ; lpbi : BITMAPINFOHEADER* -> "sptr" ; xSrc : INT -> "int" ; ySrc : INT -> "int" ; dxSrc : INT -> "int" ; dySrc : INT -> "int" ; dwRate : DWORD -> "int" ; dwScale : DWORD -> "int" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
出力引数:
; DWORD ICDrawBegin(HIC hic, DWORD dwFlags, HPALETTE hpal, HWND hwnd, HDC hdc, INT xDst, INT yDst, INT dxDst, INT dyDst, BITMAPINFOHEADER* lpbi, INT xSrc, INT ySrc, INT dxSrc, INT dySrc, DWORD dwRate, DWORD dwScale) #uselib "MSVFW32.dll" #cfunc global ICDrawBegin "ICDrawBegin" intptr, int, intptr, intptr, intptr, int, int, int, int, var, int, int, int, int, int, int ; res = ICDrawBegin(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale) ; hic : HIC -> "intptr" ; dwFlags : DWORD -> "int" ; hpal : HPALETTE optional -> "intptr" ; hwnd : HWND optional -> "intptr" ; hdc : HDC optional -> "intptr" ; xDst : INT -> "int" ; yDst : INT -> "int" ; dxDst : INT -> "int" ; dyDst : INT -> "int" ; lpbi : BITMAPINFOHEADER* -> "var" ; xSrc : INT -> "int" ; ySrc : INT -> "int" ; dxSrc : INT -> "int" ; dySrc : INT -> "int" ; dwRate : DWORD -> "int" ; dwScale : DWORD -> "int" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; DWORD ICDrawBegin(HIC hic, DWORD dwFlags, HPALETTE hpal, HWND hwnd, HDC hdc, INT xDst, INT yDst, INT dxDst, INT dyDst, BITMAPINFOHEADER* lpbi, INT xSrc, INT ySrc, INT dxSrc, INT dySrc, DWORD dwRate, DWORD dwScale) #uselib "MSVFW32.dll" #cfunc global ICDrawBegin "ICDrawBegin" intptr, int, intptr, intptr, intptr, int, int, int, int, intptr, int, int, int, int, int, int ; res = ICDrawBegin(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, varptr(lpbi), xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale) ; hic : HIC -> "intptr" ; dwFlags : DWORD -> "int" ; hpal : HPALETTE optional -> "intptr" ; hwnd : HWND optional -> "intptr" ; hdc : HDC optional -> "intptr" ; xDst : INT -> "int" ; yDst : INT -> "int" ; dxDst : INT -> "int" ; dyDst : INT -> "int" ; lpbi : BITMAPINFOHEADER* -> "intptr" ; xSrc : INT -> "int" ; ySrc : INT -> "int" ; dxSrc : INT -> "int" ; dySrc : INT -> "int" ; dwRate : DWORD -> "int" ; dwScale : DWORD -> "int" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
msvfw32 = windows.NewLazySystemDLL("MSVFW32.dll")
procICDrawBegin = msvfw32.NewProc("ICDrawBegin")
)
// hic (HIC), dwFlags (DWORD), hpal (HPALETTE optional), hwnd (HWND optional), hdc (HDC optional), xDst (INT), yDst (INT), dxDst (INT), dyDst (INT), lpbi (BITMAPINFOHEADER*), xSrc (INT), ySrc (INT), dxSrc (INT), dySrc (INT), dwRate (DWORD), dwScale (DWORD)
r1, _, err := procICDrawBegin.Call(
uintptr(hic),
uintptr(dwFlags),
uintptr(hpal),
uintptr(hwnd),
uintptr(hdc),
uintptr(xDst),
uintptr(yDst),
uintptr(dxDst),
uintptr(dyDst),
uintptr(lpbi),
uintptr(xSrc),
uintptr(ySrc),
uintptr(dxSrc),
uintptr(dySrc),
uintptr(dwRate),
uintptr(dwScale),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // DWORDfunction ICDrawBegin(
hic: THandle; // HIC
dwFlags: DWORD; // DWORD
hpal: THandle; // HPALETTE optional
hwnd: THandle; // HWND optional
hdc: THandle; // HDC optional
xDst: Integer; // INT
yDst: Integer; // INT
dxDst: Integer; // INT
dyDst: Integer; // INT
lpbi: Pointer; // BITMAPINFOHEADER*
xSrc: Integer; // INT
ySrc: Integer; // INT
dxSrc: Integer; // INT
dySrc: Integer; // INT
dwRate: DWORD; // DWORD
dwScale: DWORD // DWORD
): DWORD; cdecl;
external 'MSVFW32.dll' name 'ICDrawBegin';result := DllCall("MSVFW32\ICDrawBegin"
, "Ptr", hic ; HIC
, "UInt", dwFlags ; DWORD
, "Ptr", hpal ; HPALETTE optional
, "Ptr", hwnd ; HWND optional
, "Ptr", hdc ; HDC optional
, "Int", xDst ; INT
, "Int", yDst ; INT
, "Int", dxDst ; INT
, "Int", dyDst ; INT
, "Ptr", lpbi ; BITMAPINFOHEADER*
, "Int", xSrc ; INT
, "Int", ySrc ; INT
, "Int", dxSrc ; INT
, "Int", dySrc ; INT
, "UInt", dwRate ; DWORD
, "UInt", dwScale ; DWORD
, "Cdecl UInt") ; return: DWORD●ICDrawBegin(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale) = DLL("MSVFW32.dll", "dword ICDrawBegin(void*, dword, void*, void*, void*, int, int, int, int, void*, int, int, int, int, dword, dword)")
# 呼び出し: ICDrawBegin(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale)
# hic : HIC -> "void*"
# dwFlags : DWORD -> "dword"
# hpal : HPALETTE optional -> "void*"
# hwnd : HWND optional -> "void*"
# hdc : HDC optional -> "void*"
# xDst : INT -> "int"
# yDst : INT -> "int"
# dxDst : INT -> "int"
# dyDst : INT -> "int"
# lpbi : BITMAPINFOHEADER* -> "void*"
# xSrc : INT -> "int"
# ySrc : INT -> "int"
# dxSrc : INT -> "int"
# dySrc : INT -> "int"
# dwRate : DWORD -> "dword"
# dwScale : DWORD -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
# ※cdecl関数。DLL()宣言はstdcall前提。cdeclは EXEC_PTR(`cdecl`,…) を使用。const std = @import("std");
extern "msvfw32" fn ICDrawBegin(
hic: ?*anyopaque, // HIC
dwFlags: u32, // DWORD
hpal: ?*anyopaque, // HPALETTE optional
hwnd: ?*anyopaque, // HWND optional
hdc: ?*anyopaque, // HDC optional
xDst: i32, // INT
yDst: i32, // INT
dxDst: i32, // INT
dyDst: i32, // INT
lpbi: [*c]BITMAPINFOHEADER, // BITMAPINFOHEADER*
xSrc: i32, // INT
ySrc: i32, // INT
dxSrc: i32, // INT
dySrc: i32, // INT
dwRate: u32, // DWORD
dwScale: u32 // DWORD
) callconv(.c) u32;proc ICDrawBegin(
hic: pointer, # HIC
dwFlags: uint32, # DWORD
hpal: pointer, # HPALETTE optional
hwnd: pointer, # HWND optional
hdc: pointer, # HDC optional
xDst: int32, # INT
yDst: int32, # INT
dxDst: int32, # INT
dyDst: int32, # INT
lpbi: ptr BITMAPINFOHEADER, # BITMAPINFOHEADER*
xSrc: int32, # INT
ySrc: int32, # INT
dxSrc: int32, # INT
dySrc: int32, # INT
dwRate: uint32, # DWORD
dwScale: uint32 # DWORD
): uint32 {.importc: "ICDrawBegin", cdecl, dynlib: "MSVFW32.dll".}pragma(lib, "msvfw32");
extern(C)
uint ICDrawBegin(
void* hic, // HIC
uint dwFlags, // DWORD
void* hpal, // HPALETTE optional
void* hwnd, // HWND optional
void* hdc, // HDC optional
int xDst, // INT
int yDst, // INT
int dxDst, // INT
int dyDst, // INT
BITMAPINFOHEADER* lpbi, // BITMAPINFOHEADER*
int xSrc, // INT
int ySrc, // INT
int dxSrc, // INT
int dySrc, // INT
uint dwRate, // DWORD
uint dwScale // DWORD
);ccall((:ICDrawBegin, "MSVFW32.dll"), UInt32,
(Ptr{Cvoid}, UInt32, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Int32, Int32, Int32, Int32, Ptr{BITMAPINFOHEADER}, Int32, Int32, Int32, Int32, UInt32, UInt32),
hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale)
# hic : HIC -> Ptr{Cvoid}
# dwFlags : DWORD -> UInt32
# hpal : HPALETTE optional -> Ptr{Cvoid}
# hwnd : HWND optional -> Ptr{Cvoid}
# hdc : HDC optional -> Ptr{Cvoid}
# xDst : INT -> Int32
# yDst : INT -> Int32
# dxDst : INT -> Int32
# dyDst : INT -> Int32
# lpbi : BITMAPINFOHEADER* -> Ptr{BITMAPINFOHEADER}
# xSrc : INT -> Int32
# ySrc : INT -> Int32
# dxSrc : INT -> Int32
# dySrc : INT -> Int32
# dwRate : DWORD -> UInt32
# dwScale : DWORD -> UInt32local ffi = require("ffi")
ffi.cdef[[
uint32_t ICDrawBegin(
void* hic,
uint32_t dwFlags,
void* hpal,
void* hwnd,
void* hdc,
int32_t xDst,
int32_t yDst,
int32_t dxDst,
int32_t dyDst,
void* lpbi,
int32_t xSrc,
int32_t ySrc,
int32_t dxSrc,
int32_t dySrc,
uint32_t dwRate,
uint32_t dwScale);
]]
local msvfw32 = ffi.load("msvfw32")
-- msvfw32.ICDrawBegin(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale)
-- hic : HIC
-- dwFlags : DWORD
-- hpal : HPALETTE optional
-- hwnd : HWND optional
-- hdc : HDC optional
-- xDst : INT
-- yDst : INT
-- dxDst : INT
-- dyDst : INT
-- lpbi : BITMAPINFOHEADER*
-- xSrc : INT
-- ySrc : INT
-- dxSrc : INT
-- dySrc : INT
-- dwRate : DWORD
-- dwScale : DWORD
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。const koffi = require('koffi');
const lib = koffi.load('MSVFW32.dll');
const ICDrawBegin = lib.func('__cdecl', 'ICDrawBegin', 'uint32_t', ['void *', 'uint32_t', 'void *', 'void *', 'void *', 'int32_t', 'int32_t', 'int32_t', 'int32_t', 'void *', 'int32_t', 'int32_t', 'int32_t', 'int32_t', 'uint32_t', 'uint32_t']);
// ICDrawBegin(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale)
// hic : HIC -> 'void *'
// dwFlags : DWORD -> 'uint32_t'
// hpal : HPALETTE optional -> 'void *'
// hwnd : HWND optional -> 'void *'
// hdc : HDC optional -> 'void *'
// xDst : INT -> 'int32_t'
// yDst : INT -> 'int32_t'
// dxDst : INT -> 'int32_t'
// dyDst : INT -> 'int32_t'
// lpbi : BITMAPINFOHEADER* -> 'void *'
// xSrc : INT -> 'int32_t'
// ySrc : INT -> 'int32_t'
// dxSrc : INT -> 'int32_t'
// dySrc : INT -> 'int32_t'
// dwRate : DWORD -> 'uint32_t'
// dwScale : DWORD -> 'uint32_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("MSVFW32.dll", {
ICDrawBegin: { parameters: ["pointer", "u32", "pointer", "pointer", "pointer", "i32", "i32", "i32", "i32", "pointer", "i32", "i32", "i32", "i32", "u32", "u32"], result: "u32" },
});
// lib.symbols.ICDrawBegin(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale)
// hic : HIC -> "pointer"
// dwFlags : DWORD -> "u32"
// hpal : HPALETTE optional -> "pointer"
// hwnd : HWND optional -> "pointer"
// hdc : HDC optional -> "pointer"
// xDst : INT -> "i32"
// yDst : INT -> "i32"
// dxDst : INT -> "i32"
// dyDst : INT -> "i32"
// lpbi : BITMAPINFOHEADER* -> "pointer"
// xSrc : INT -> "i32"
// ySrc : INT -> "i32"
// dxSrc : INT -> "i32"
// dySrc : INT -> "i32"
// dwRate : DWORD -> "u32"
// dwScale : DWORD -> "u32"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
uint32_t ICDrawBegin(
void* hic,
uint32_t dwFlags,
void* hpal,
void* hwnd,
void* hdc,
int32_t xDst,
int32_t yDst,
int32_t dxDst,
int32_t dyDst,
void* lpbi,
int32_t xSrc,
int32_t ySrc,
int32_t dxSrc,
int32_t dySrc,
uint32_t dwRate,
uint32_t dwScale);
C, "MSVFW32.dll");
// $ffi->ICDrawBegin(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale);
// hic : HIC
// dwFlags : DWORD
// hpal : HPALETTE optional
// hwnd : HWND optional
// hdc : HDC optional
// xDst : INT
// yDst : INT
// dxDst : INT
// dyDst : INT
// lpbi : BITMAPINFOHEADER*
// xSrc : INT
// ySrc : INT
// dxSrc : INT
// dySrc : INT
// dwRate : DWORD
// dwScale : DWORD
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
public interface Msvfw32 extends Library {
Msvfw32 INSTANCE = Native.load("msvfw32", Msvfw32.class);
int ICDrawBegin(
Pointer hic, // HIC
int dwFlags, // DWORD
Pointer hpal, // HPALETTE optional
Pointer hwnd, // HWND optional
Pointer hdc, // HDC optional
int xDst, // INT
int yDst, // INT
int dxDst, // INT
int dyDst, // INT
Pointer lpbi, // BITMAPINFOHEADER*
int xSrc, // INT
int ySrc, // INT
int dxSrc, // INT
int dySrc, // INT
int dwRate, // DWORD
int dwScale // DWORD
);
}@[Link("msvfw32")]
lib LibMSVFW32
fun ICDrawBegin = ICDrawBegin(
hic : Void*, # HIC
dwFlags : UInt32, # DWORD
hpal : Void*, # HPALETTE optional
hwnd : Void*, # HWND optional
hdc : Void*, # HDC optional
xDst : Int32, # INT
yDst : Int32, # INT
dxDst : Int32, # INT
dyDst : Int32, # INT
lpbi : BITMAPINFOHEADER*, # BITMAPINFOHEADER*
xSrc : Int32, # INT
ySrc : Int32, # INT
dxSrc : Int32, # INT
dySrc : Int32, # INT
dwRate : UInt32, # DWORD
dwScale : UInt32 # DWORD
) : UInt32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef ICDrawBeginNative = Uint32 Function(Pointer<Void>, Uint32, Pointer<Void>, Pointer<Void>, Pointer<Void>, Int32, Int32, Int32, Int32, Pointer<Void>, Int32, Int32, Int32, Int32, Uint32, Uint32);
typedef ICDrawBeginDart = int Function(Pointer<Void>, int, Pointer<Void>, Pointer<Void>, Pointer<Void>, int, int, int, int, Pointer<Void>, int, int, int, int, int, int);
final ICDrawBegin = DynamicLibrary.open('MSVFW32.dll')
.lookupFunction<ICDrawBeginNative, ICDrawBeginDart>('ICDrawBegin');
// hic : HIC -> Pointer<Void>
// dwFlags : DWORD -> Uint32
// hpal : HPALETTE optional -> Pointer<Void>
// hwnd : HWND optional -> Pointer<Void>
// hdc : HDC optional -> Pointer<Void>
// xDst : INT -> Int32
// yDst : INT -> Int32
// dxDst : INT -> Int32
// dyDst : INT -> Int32
// lpbi : BITMAPINFOHEADER* -> Pointer<Void>
// xSrc : INT -> Int32
// ySrc : INT -> Int32
// dxSrc : INT -> Int32
// dySrc : INT -> Int32
// dwRate : DWORD -> Uint32
// dwScale : DWORD -> Uint32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function ICDrawBegin(
hic: THandle; // HIC
dwFlags: DWORD; // DWORD
hpal: THandle; // HPALETTE optional
hwnd: THandle; // HWND optional
hdc: THandle; // HDC optional
xDst: Integer; // INT
yDst: Integer; // INT
dxDst: Integer; // INT
dyDst: Integer; // INT
lpbi: Pointer; // BITMAPINFOHEADER*
xSrc: Integer; // INT
ySrc: Integer; // INT
dxSrc: Integer; // INT
dySrc: Integer; // INT
dwRate: DWORD; // DWORD
dwScale: DWORD // DWORD
): DWORD; cdecl;
external 'MSVFW32.dll' name 'ICDrawBegin';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import ccall safe "ICDrawBegin"
c_ICDrawBegin :: Ptr () -> Word32 -> Ptr () -> Ptr () -> Ptr () -> Int32 -> Int32 -> Int32 -> Int32 -> Ptr () -> Int32 -> Int32 -> Int32 -> Int32 -> Word32 -> Word32 -> IO Word32
-- hic : HIC -> Ptr ()
-- dwFlags : DWORD -> Word32
-- hpal : HPALETTE optional -> Ptr ()
-- hwnd : HWND optional -> Ptr ()
-- hdc : HDC optional -> Ptr ()
-- xDst : INT -> Int32
-- yDst : INT -> Int32
-- dxDst : INT -> Int32
-- dyDst : INT -> Int32
-- lpbi : BITMAPINFOHEADER* -> Ptr ()
-- xSrc : INT -> Int32
-- ySrc : INT -> Int32
-- dxSrc : INT -> Int32
-- dySrc : INT -> Int32
-- dwRate : DWORD -> Word32
-- dwScale : DWORD -> Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。open Ctypes
open Foreign
let icdrawbegin =
foreign "ICDrawBegin"
((ptr void) @-> uint32_t @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> int32_t @-> int32_t @-> int32_t @-> int32_t @-> (ptr void) @-> int32_t @-> int32_t @-> int32_t @-> int32_t @-> uint32_t @-> uint32_t @-> returning uint32_t)
(* hic : HIC -> (ptr void) *)
(* dwFlags : DWORD -> uint32_t *)
(* hpal : HPALETTE optional -> (ptr void) *)
(* hwnd : HWND optional -> (ptr void) *)
(* hdc : HDC optional -> (ptr void) *)
(* xDst : INT -> int32_t *)
(* yDst : INT -> int32_t *)
(* dxDst : INT -> int32_t *)
(* dyDst : INT -> int32_t *)
(* lpbi : BITMAPINFOHEADER* -> (ptr void) *)
(* xSrc : INT -> int32_t *)
(* ySrc : INT -> int32_t *)
(* dxSrc : INT -> int32_t *)
(* dySrc : INT -> int32_t *)
(* dwRate : DWORD -> uint32_t *)
(* dwScale : DWORD -> uint32_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)(cffi:define-foreign-library msvfw32 (t "MSVFW32.dll"))
(cffi:use-foreign-library msvfw32)
(cffi:defcfun ("ICDrawBegin" icdraw-begin :convention :cdecl) :uint32
(hic :pointer) ; HIC
(dw-flags :uint32) ; DWORD
(hpal :pointer) ; HPALETTE optional
(hwnd :pointer) ; HWND optional
(hdc :pointer) ; HDC optional
(x-dst :int32) ; INT
(y-dst :int32) ; INT
(dx-dst :int32) ; INT
(dy-dst :int32) ; INT
(lpbi :pointer) ; BITMAPINFOHEADER*
(x-src :int32) ; INT
(y-src :int32) ; INT
(dx-src :int32) ; INT
(dy-src :int32) ; INT
(dw-rate :uint32) ; DWORD
(dw-scale :uint32)) ; DWORD
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。use Win32::API;
my $ICDrawBegin = Win32::API::More->new('MSVFW32',
'DWORD ICDrawBegin(HANDLE hic, DWORD dwFlags, HANDLE hpal, HANDLE hwnd, HANDLE hdc, int xDst, int yDst, int dxDst, int dyDst, LPVOID lpbi, int xSrc, int ySrc, int dxSrc, int dySrc, DWORD dwRate, DWORD dwScale)');
# my $ret = $ICDrawBegin->Call($hic, $dwFlags, $hpal, $hwnd, $hdc, $xDst, $yDst, $dxDst, $dyDst, $lpbi, $xSrc, $ySrc, $dxSrc, $dySrc, $dwRate, $dwScale);
# hic : HIC -> HANDLE
# dwFlags : DWORD -> DWORD
# hpal : HPALETTE optional -> HANDLE
# hwnd : HWND optional -> HANDLE
# hdc : HDC optional -> HANDLE
# xDst : INT -> int
# yDst : INT -> int
# dxDst : INT -> int
# dyDst : INT -> int
# lpbi : BITMAPINFOHEADER* -> LPVOID
# xSrc : INT -> int
# ySrc : INT -> int
# dxSrc : INT -> int
# dySrc : INT -> int
# dwRate : DWORD -> DWORD
# dwScale : DWORD -> DWORD
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。関連項目
使用する型