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

MFCreateVirtualCamera

関数
仮想カメラを作成して登録する。
DLLMFSENSORGROUP.dll呼出規約winapi

シグネチャ

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

HRESULT MFCreateVirtualCamera(
    MFVirtualCameraType type,
    MFVirtualCameraLifetime lifetime,
    MFVirtualCameraAccess access,
    LPCWSTR friendlyName,
    LPCWSTR sourceId,
    const GUID* categories,   // optional
    DWORD categoryCount,
    IMFVirtualCamera** virtualCamera
);

パラメーター

名前方向
typeMFVirtualCameraTypein
lifetimeMFVirtualCameraLifetimein
accessMFVirtualCameraAccessin
friendlyNameLPCWSTRin
sourceIdLPCWSTRin
categoriesGUID*inoptional
categoryCountDWORDin
virtualCameraIMFVirtualCamera**out

戻り値の型: HRESULT

各言語での呼び出し定義

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

HRESULT MFCreateVirtualCamera(
    MFVirtualCameraType type,
    MFVirtualCameraLifetime lifetime,
    MFVirtualCameraAccess access,
    LPCWSTR friendlyName,
    LPCWSTR sourceId,
    const GUID* categories,   // optional
    DWORD categoryCount,
    IMFVirtualCamera** virtualCamera
);
[DllImport("MFSENSORGROUP.dll", ExactSpelling = true)]
static extern int MFCreateVirtualCamera(
    int type,   // MFVirtualCameraType
    int lifetime,   // MFVirtualCameraLifetime
    int access,   // MFVirtualCameraAccess
    [MarshalAs(UnmanagedType.LPWStr)] string friendlyName,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string sourceId,   // LPCWSTR
    IntPtr categories,   // GUID* optional
    uint categoryCount,   // DWORD
    IntPtr virtualCamera   // IMFVirtualCamera** out
);
<DllImport("MFSENSORGROUP.dll", ExactSpelling:=True)>
Public Shared Function MFCreateVirtualCamera(
    type As Integer,   ' MFVirtualCameraType
    lifetime As Integer,   ' MFVirtualCameraLifetime
    access As Integer,   ' MFVirtualCameraAccess
    <MarshalAs(UnmanagedType.LPWStr)> friendlyName As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> sourceId As String,   ' LPCWSTR
    categories As IntPtr,   ' GUID* optional
    categoryCount As UInteger,   ' DWORD
    virtualCamera As IntPtr   ' IMFVirtualCamera** out
) As Integer
End Function
' type : MFVirtualCameraType
' lifetime : MFVirtualCameraLifetime
' access : MFVirtualCameraAccess
' friendlyName : LPCWSTR
' sourceId : LPCWSTR
' categories : GUID* optional
' categoryCount : DWORD
' virtualCamera : IMFVirtualCamera** out
Declare PtrSafe Function MFCreateVirtualCamera Lib "mfsensorgroup" ( _
    ByVal type As Long, _
    ByVal lifetime As Long, _
    ByVal access As Long, _
    ByVal friendlyName As LongPtr, _
    ByVal sourceId As LongPtr, _
    ByVal categories As LongPtr, _
    ByVal categoryCount As Long, _
    ByVal virtualCamera As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

MFCreateVirtualCamera = ctypes.windll.mfsensorgroup.MFCreateVirtualCamera
MFCreateVirtualCamera.restype = ctypes.c_int
MFCreateVirtualCamera.argtypes = [
    ctypes.c_int,  # type : MFVirtualCameraType
    ctypes.c_int,  # lifetime : MFVirtualCameraLifetime
    ctypes.c_int,  # access : MFVirtualCameraAccess
    wintypes.LPCWSTR,  # friendlyName : LPCWSTR
    wintypes.LPCWSTR,  # sourceId : LPCWSTR
    ctypes.c_void_p,  # categories : GUID* optional
    wintypes.DWORD,  # categoryCount : DWORD
    ctypes.c_void_p,  # virtualCamera : IMFVirtualCamera** out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('MFSENSORGROUP.dll')
MFCreateVirtualCamera = Fiddle::Function.new(
  lib['MFCreateVirtualCamera'],
  [
    Fiddle::TYPE_INT,  # type : MFVirtualCameraType
    Fiddle::TYPE_INT,  # lifetime : MFVirtualCameraLifetime
    Fiddle::TYPE_INT,  # access : MFVirtualCameraAccess
    Fiddle::TYPE_VOIDP,  # friendlyName : LPCWSTR
    Fiddle::TYPE_VOIDP,  # sourceId : LPCWSTR
    Fiddle::TYPE_VOIDP,  # categories : GUID* optional
    -Fiddle::TYPE_INT,  # categoryCount : DWORD
    Fiddle::TYPE_VOIDP,  # virtualCamera : IMFVirtualCamera** out
  ],
  Fiddle::TYPE_INT)
#[link(name = "mfsensorgroup")]
extern "system" {
    fn MFCreateVirtualCamera(
        type: i32,  // MFVirtualCameraType
        lifetime: i32,  // MFVirtualCameraLifetime
        access: i32,  // MFVirtualCameraAccess
        friendlyName: *const u16,  // LPCWSTR
        sourceId: *const u16,  // LPCWSTR
        categories: *const GUID,  // GUID* optional
        categoryCount: u32,  // DWORD
        virtualCamera: *mut *mut core::ffi::c_void  // IMFVirtualCamera** out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("MFSENSORGROUP.dll")]
public static extern int MFCreateVirtualCamera(int type, int lifetime, int access, [MarshalAs(UnmanagedType.LPWStr)] string friendlyName, [MarshalAs(UnmanagedType.LPWStr)] string sourceId, IntPtr categories, uint categoryCount, IntPtr virtualCamera);
"@
$api = Add-Type -MemberDefinition $sig -Name 'MFSENSORGROUP_MFCreateVirtualCamera' -Namespace Win32 -PassThru
# $api::MFCreateVirtualCamera(type, lifetime, access, friendlyName, sourceId, categories, categoryCount, virtualCamera)
#uselib "MFSENSORGROUP.dll"
#func global MFCreateVirtualCamera "MFCreateVirtualCamera" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; MFCreateVirtualCamera type, lifetime, access, friendlyName, sourceId, varptr(categories), categoryCount, virtualCamera   ; 戻り値は stat
; type : MFVirtualCameraType -> "sptr"
; lifetime : MFVirtualCameraLifetime -> "sptr"
; access : MFVirtualCameraAccess -> "sptr"
; friendlyName : LPCWSTR -> "sptr"
; sourceId : LPCWSTR -> "sptr"
; categories : GUID* optional -> "sptr"
; categoryCount : DWORD -> "sptr"
; virtualCamera : IMFVirtualCamera** out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "MFSENSORGROUP.dll"
#cfunc global MFCreateVirtualCamera "MFCreateVirtualCamera" int, int, int, wstr, wstr, var, int, sptr
; res = MFCreateVirtualCamera(type, lifetime, access, friendlyName, sourceId, categories, categoryCount, virtualCamera)
; type : MFVirtualCameraType -> "int"
; lifetime : MFVirtualCameraLifetime -> "int"
; access : MFVirtualCameraAccess -> "int"
; friendlyName : LPCWSTR -> "wstr"
; sourceId : LPCWSTR -> "wstr"
; categories : GUID* optional -> "var"
; categoryCount : DWORD -> "int"
; virtualCamera : IMFVirtualCamera** out -> "sptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; HRESULT MFCreateVirtualCamera(MFVirtualCameraType type, MFVirtualCameraLifetime lifetime, MFVirtualCameraAccess access, LPCWSTR friendlyName, LPCWSTR sourceId, GUID* categories, DWORD categoryCount, IMFVirtualCamera** virtualCamera)
#uselib "MFSENSORGROUP.dll"
#cfunc global MFCreateVirtualCamera "MFCreateVirtualCamera" int, int, int, wstr, wstr, var, int, intptr
; res = MFCreateVirtualCamera(type, lifetime, access, friendlyName, sourceId, categories, categoryCount, virtualCamera)
; type : MFVirtualCameraType -> "int"
; lifetime : MFVirtualCameraLifetime -> "int"
; access : MFVirtualCameraAccess -> "int"
; friendlyName : LPCWSTR -> "wstr"
; sourceId : LPCWSTR -> "wstr"
; categories : GUID* optional -> "var"
; categoryCount : DWORD -> "int"
; virtualCamera : IMFVirtualCamera** out -> "intptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	mfsensorgroup = windows.NewLazySystemDLL("MFSENSORGROUP.dll")
	procMFCreateVirtualCamera = mfsensorgroup.NewProc("MFCreateVirtualCamera")
)

// type (MFVirtualCameraType), lifetime (MFVirtualCameraLifetime), access (MFVirtualCameraAccess), friendlyName (LPCWSTR), sourceId (LPCWSTR), categories (GUID* optional), categoryCount (DWORD), virtualCamera (IMFVirtualCamera** out)
r1, _, err := procMFCreateVirtualCamera.Call(
	uintptr(type),
	uintptr(lifetime),
	uintptr(access),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(friendlyName))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(sourceId))),
	uintptr(categories),
	uintptr(categoryCount),
	uintptr(virtualCamera),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function MFCreateVirtualCamera(
  type: Integer;   // MFVirtualCameraType
  lifetime: Integer;   // MFVirtualCameraLifetime
  access: Integer;   // MFVirtualCameraAccess
  friendlyName: PWideChar;   // LPCWSTR
  sourceId: PWideChar;   // LPCWSTR
  categories: PGUID;   // GUID* optional
  categoryCount: DWORD;   // DWORD
  virtualCamera: Pointer   // IMFVirtualCamera** out
): Integer; stdcall;
  external 'MFSENSORGROUP.dll' name 'MFCreateVirtualCamera';
result := DllCall("MFSENSORGROUP\MFCreateVirtualCamera"
    , "Int", type   ; MFVirtualCameraType
    , "Int", lifetime   ; MFVirtualCameraLifetime
    , "Int", access   ; MFVirtualCameraAccess
    , "WStr", friendlyName   ; LPCWSTR
    , "WStr", sourceId   ; LPCWSTR
    , "Ptr", categories   ; GUID* optional
    , "UInt", categoryCount   ; DWORD
    , "Ptr", virtualCamera   ; IMFVirtualCamera** out
    , "Int")   ; return: HRESULT
●MFCreateVirtualCamera(type, lifetime, access, friendlyName, sourceId, categories, categoryCount, virtualCamera) = DLL("MFSENSORGROUP.dll", "int MFCreateVirtualCamera(int, int, int, char*, char*, void*, dword, void*)")
# 呼び出し: MFCreateVirtualCamera(type, lifetime, access, friendlyName, sourceId, categories, categoryCount, virtualCamera)
# type : MFVirtualCameraType -> "int"
# lifetime : MFVirtualCameraLifetime -> "int"
# access : MFVirtualCameraAccess -> "int"
# friendlyName : LPCWSTR -> "char*"
# sourceId : LPCWSTR -> "char*"
# categories : GUID* optional -> "void*"
# categoryCount : DWORD -> "dword"
# virtualCamera : IMFVirtualCamera** out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。