Win32 API 日本語リファレンス
ホームMedia.Multimedia › AVIStreamGetFrameOpen

AVIStreamGetFrameOpen

関数
AVIストリームからフレーム取得用オブジェクトを準備する。
DLLAVIFIL32.dll呼出規約winapi対応OSWindows 2000 以降

シグネチャ

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

IGetFrame* AVIStreamGetFrameOpen(
    IAVIStream* pavi,
    BITMAPINFOHEADER* lpbiWanted   // optional
);

パラメーター

名前方向
paviIAVIStream*in
lpbiWantedBITMAPINFOHEADER*inoptional

戻り値の型: IGetFrame*

各言語での呼び出し定義

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

IGetFrame* AVIStreamGetFrameOpen(
    IAVIStream* pavi,
    BITMAPINFOHEADER* lpbiWanted   // optional
);
[DllImport("AVIFIL32.dll", ExactSpelling = true)]
static extern IntPtr AVIStreamGetFrameOpen(
    IntPtr pavi,   // IAVIStream*
    IntPtr lpbiWanted   // BITMAPINFOHEADER* optional
);
<DllImport("AVIFIL32.dll", ExactSpelling:=True)>
Public Shared Function AVIStreamGetFrameOpen(
    pavi As IntPtr,   ' IAVIStream*
    lpbiWanted As IntPtr   ' BITMAPINFOHEADER* optional
) As IntPtr
End Function
' pavi : IAVIStream*
' lpbiWanted : BITMAPINFOHEADER* optional
Declare PtrSafe Function AVIStreamGetFrameOpen Lib "avifil32" ( _
    ByVal pavi As LongPtr, _
    ByVal lpbiWanted As LongPtr) As LongPtr
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

AVIStreamGetFrameOpen = ctypes.windll.avifil32.AVIStreamGetFrameOpen
AVIStreamGetFrameOpen.restype = ctypes.c_void_p
AVIStreamGetFrameOpen.argtypes = [
    ctypes.c_void_p,  # pavi : IAVIStream*
    ctypes.c_void_p,  # lpbiWanted : BITMAPINFOHEADER* optional
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('AVIFIL32.dll')
AVIStreamGetFrameOpen = Fiddle::Function.new(
  lib['AVIStreamGetFrameOpen'],
  [
    Fiddle::TYPE_VOIDP,  # pavi : IAVIStream*
    Fiddle::TYPE_VOIDP,  # lpbiWanted : BITMAPINFOHEADER* optional
  ],
  Fiddle::TYPE_VOIDP)
#[link(name = "avifil32")]
extern "system" {
    fn AVIStreamGetFrameOpen(
        pavi: *mut core::ffi::c_void,  // IAVIStream*
        lpbiWanted: *mut BITMAPINFOHEADER  // BITMAPINFOHEADER* optional
    ) -> *mut core::ffi::c_void;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("AVIFIL32.dll")]
public static extern IntPtr AVIStreamGetFrameOpen(IntPtr pavi, IntPtr lpbiWanted);
"@
$api = Add-Type -MemberDefinition $sig -Name 'AVIFIL32_AVIStreamGetFrameOpen' -Namespace Win32 -PassThru
# $api::AVIStreamGetFrameOpen(pavi, lpbiWanted)
#uselib "AVIFIL32.dll"
#func global AVIStreamGetFrameOpen "AVIStreamGetFrameOpen" sptr, sptr
; AVIStreamGetFrameOpen pavi, varptr(lpbiWanted)   ; 戻り値は stat
; pavi : IAVIStream* -> "sptr"
; lpbiWanted : BITMAPINFOHEADER* optional -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "AVIFIL32.dll"
#cfunc global AVIStreamGetFrameOpen "AVIStreamGetFrameOpen" sptr, var
; res = AVIStreamGetFrameOpen(pavi, lpbiWanted)
; pavi : IAVIStream* -> "sptr"
; lpbiWanted : BITMAPINFOHEADER* optional -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; IGetFrame* AVIStreamGetFrameOpen(IAVIStream* pavi, BITMAPINFOHEADER* lpbiWanted)
#uselib "AVIFIL32.dll"
#cfunc global AVIStreamGetFrameOpen "AVIStreamGetFrameOpen" intptr, var
; res = AVIStreamGetFrameOpen(pavi, lpbiWanted)
; pavi : IAVIStream* -> "intptr"
; lpbiWanted : BITMAPINFOHEADER* optional -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	avifil32 = windows.NewLazySystemDLL("AVIFIL32.dll")
	procAVIStreamGetFrameOpen = avifil32.NewProc("AVIStreamGetFrameOpen")
)

// pavi (IAVIStream*), lpbiWanted (BITMAPINFOHEADER* optional)
r1, _, err := procAVIStreamGetFrameOpen.Call(
	uintptr(pavi),
	uintptr(lpbiWanted),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // IGetFrame*
function AVIStreamGetFrameOpen(
  pavi: Pointer;   // IAVIStream*
  lpbiWanted: Pointer   // BITMAPINFOHEADER* optional
): Pointer; stdcall;
  external 'AVIFIL32.dll' name 'AVIStreamGetFrameOpen';
result := DllCall("AVIFIL32\AVIStreamGetFrameOpen"
    , "Ptr", pavi   ; IAVIStream*
    , "Ptr", lpbiWanted   ; BITMAPINFOHEADER* optional
    , "Ptr")   ; return: IGetFrame*
●AVIStreamGetFrameOpen(pavi, lpbiWanted) = DLL("AVIFIL32.dll", "void* AVIStreamGetFrameOpen(void*, void*)")
# 呼び出し: AVIStreamGetFrameOpen(pavi, lpbiWanted)
# pavi : IAVIStream* -> "void*"
# lpbiWanted : BITMAPINFOHEADER* optional -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。