linePrepareAddToConferenceW
関数シグネチャ
// TAPI32.dll (Unicode / -W)
#include <windows.h>
INT linePrepareAddToConferenceW(
DWORD hConfCall,
DWORD* lphConsultCall,
const LINECALLPARAMS* lpCallParams
);パラメーター
| 名前 | 型 | 方向 | 説明 |
|---|---|---|---|
| hConfCall | DWORD | in | 会議通話へのハンドル。アプリケーションはこの通話の所有者である必要があります。hConfCall の通話状態は connected である必要があります。 |
| lphConsultCall | DWORD* | inout | HCALL ハンドルへのポインター。この場所には、追加対象となる相談通話 (consultation call) を識別するハンドルが格納されます。当初、アプリケーションがこの通話の唯一の所有者になります。 |
| lpCallParams | LINECALLPARAMS* | in | 相談通話を確立するときに使用する通話パラメーターを格納した LINECALLPARAMS 構造体へのポインター。特別な通話設定パラメーターが不要な場合、このパラメーターには NULL を指定できます。 |
戻り値の型: INT
公式ドキュメント
linePrepareAddToConferenceW (Unicode) 関数 (tapi.h) は、既存の会議通話に別の通話者を追加するための準備を行います。
戻り値
関数が非同期に完了する場合は正の要求識別子を返し、エラーが発生した場合は負のエラー番号を返します。対応する LINE_REPLY メッセージの dwParam2 パラメーターは、関数が成功した場合は 0 になり、エラーが発生した場合は負のエラー番号になります。返される可能性のある値は次のとおりです。
LINEERR_BEARERMODEUNAVAIL、LINEERR_INVALPOINTER、LINEERR_CALLUNAVAIL、LINEERR_INVALRATE、LINEERR_CONFERENCEFULL、LINEERR_NOMEM、LINEERR_INUSE、LINEERR_NOTOWNER、LINEERR_INVALADDRESSMODE、LINEERR_OPERATIONUNAVAIL、LINEERR_INVALBEARERMODE、LINEERR_OPERATIONFAILED、LINEERR_INVALCALLPARAMS、LINEERR_RATEUNAVAIL、LINEERR_INVALCALLSTATE、LINEERR_RESOURCEUNAVAIL、LINEERR_INVALCONFCALLHANDLE、LINEERR_STRUCTURETOOSMALL、LINEERR_INVALLINESTATE、LINEERR_USERUSERINFOTOOBIG、LINEERR_INVALMEDIAMODE、LINEERR_UNINITIALIZED。
解説(Remarks)
LINEERR_INVALLINESTATE が返された場合、その回線は現在この操作を実行できる状態にありません。現在有効な操作の一覧は、 LINEDEVSTATUS 構造体の dwLineFeatures メンバー (型は LINEFEATURE) で確認できます。( lineGetLineDevStatus を呼び出すと LINEDEVSTATUS 内の情報が更新されます。)
会議通話のハンドルは、 lineSetupConference によって、または三者間の会議通話として解決される lineCompleteTransfer によって取得できます。 linePrepareAddToConference 関数は通常、既存の会議通話を onHoldPendingConference 状態にし、後で lineAddToConference によって既存の会議通話に追加できる相談通話を作成します。
相談通話は lineDrop を使用して取り消すことができます。また、アプリケーションが lineSwapHold によって相談通話と保留中の会議通話を切り替えられる場合もあります。
tapi.h ヘッダーは linePrepareAddToConference を、UNICODE プリプロセッサー定数の定義に応じてこの関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして定義しています。エンコード中立のエイリアスの使用とエンコード中立でないコードを混在させると、不一致が生じてコンパイルエラーまたは実行時エラーの原因になる可能性があります。詳細については、「Conventions for Function Prototypes」を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// TAPI32.dll (Unicode / -W)
#include <windows.h>
INT linePrepareAddToConferenceW(
DWORD hConfCall,
DWORD* lphConsultCall,
const LINECALLPARAMS* lpCallParams
);[DllImport("TAPI32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern int linePrepareAddToConferenceW(
uint hConfCall, // DWORD
ref uint lphConsultCall, // DWORD* in/out
IntPtr lpCallParams // LINECALLPARAMS*
);<DllImport("TAPI32.dll", CharSet:=CharSet.Unicode, ExactSpelling:=True)>
Public Shared Function linePrepareAddToConferenceW(
hConfCall As UInteger, ' DWORD
ByRef lphConsultCall As UInteger, ' DWORD* in/out
lpCallParams As IntPtr ' LINECALLPARAMS*
) As Integer
End Function' hConfCall : DWORD
' lphConsultCall : DWORD* in/out
' lpCallParams : LINECALLPARAMS*
Declare PtrSafe Function linePrepareAddToConferenceW Lib "tapi32" ( _
ByVal hConfCall As Long, _
ByRef lphConsultCall As Long, _
ByVal lpCallParams As LongPtr) As Long
' Unicode(W): 文字列は ByVal As LongPtr とし StrPtr(unicodeStr) を渡す
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
linePrepareAddToConferenceW = ctypes.windll.tapi32.linePrepareAddToConferenceW
linePrepareAddToConferenceW.restype = ctypes.c_int
linePrepareAddToConferenceW.argtypes = [
wintypes.DWORD, # hConfCall : DWORD
ctypes.POINTER(wintypes.DWORD), # lphConsultCall : DWORD* in/out
ctypes.c_void_p, # lpCallParams : LINECALLPARAMS*
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('TAPI32.dll')
linePrepareAddToConferenceW = Fiddle::Function.new(
lib['linePrepareAddToConferenceW'],
[
-Fiddle::TYPE_INT, # hConfCall : DWORD
Fiddle::TYPE_VOIDP, # lphConsultCall : DWORD* in/out
Fiddle::TYPE_VOIDP, # lpCallParams : LINECALLPARAMS*
],
Fiddle::TYPE_INT)
# Wide strings: pass str.encode("UTF-16LE") + "\x00\x00"#[link(name = "tapi32")]
extern "system" {
fn linePrepareAddToConferenceW(
hConfCall: u32, // DWORD
lphConsultCall: *mut u32, // DWORD* in/out
lpCallParams: *const LINECALLPARAMS // LINECALLPARAMS*
) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("TAPI32.dll", CharSet = CharSet.Unicode)]
public static extern int linePrepareAddToConferenceW(uint hConfCall, ref uint lphConsultCall, IntPtr lpCallParams);
"@
$api = Add-Type -MemberDefinition $sig -Name 'TAPI32_linePrepareAddToConferenceW' -Namespace Win32 -PassThru
# $api::linePrepareAddToConferenceW(hConfCall, lphConsultCall, lpCallParams)#uselib "TAPI32.dll"
#func global linePrepareAddToConferenceW "linePrepareAddToConferenceW" wptr, wptr, wptr
; linePrepareAddToConferenceW hConfCall, varptr(lphConsultCall), varptr(lpCallParams) ; 戻り値は stat
; hConfCall : DWORD -> "wptr"
; lphConsultCall : DWORD* in/out -> "wptr"
; lpCallParams : LINECALLPARAMS* -> "wptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。#uselib "TAPI32.dll" #cfunc global linePrepareAddToConferenceW "linePrepareAddToConferenceW" int, var, var ; res = linePrepareAddToConferenceW(hConfCall, lphConsultCall, lpCallParams) ; hConfCall : DWORD -> "int" ; lphConsultCall : DWORD* in/out -> "var" ; lpCallParams : LINECALLPARAMS* -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "TAPI32.dll" #cfunc global linePrepareAddToConferenceW "linePrepareAddToConferenceW" int, sptr, sptr ; res = linePrepareAddToConferenceW(hConfCall, varptr(lphConsultCall), varptr(lpCallParams)) ; hConfCall : DWORD -> "int" ; lphConsultCall : DWORD* in/out -> "sptr" ; lpCallParams : LINECALLPARAMS* -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
; INT linePrepareAddToConferenceW(DWORD hConfCall, DWORD* lphConsultCall, LINECALLPARAMS* lpCallParams) #uselib "TAPI32.dll" #cfunc global linePrepareAddToConferenceW "linePrepareAddToConferenceW" int, var, var ; res = linePrepareAddToConferenceW(hConfCall, lphConsultCall, lpCallParams) ; hConfCall : DWORD -> "int" ; lphConsultCall : DWORD* in/out -> "var" ; lpCallParams : LINECALLPARAMS* -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; INT linePrepareAddToConferenceW(DWORD hConfCall, DWORD* lphConsultCall, LINECALLPARAMS* lpCallParams) #uselib "TAPI32.dll" #cfunc global linePrepareAddToConferenceW "linePrepareAddToConferenceW" int, intptr, intptr ; res = linePrepareAddToConferenceW(hConfCall, varptr(lphConsultCall), varptr(lpCallParams)) ; hConfCall : DWORD -> "int" ; lphConsultCall : DWORD* in/out -> "intptr" ; lpCallParams : LINECALLPARAMS* -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
tapi32 = windows.NewLazySystemDLL("TAPI32.dll")
proclinePrepareAddToConferenceW = tapi32.NewProc("linePrepareAddToConferenceW")
)
// hConfCall (DWORD), lphConsultCall (DWORD* in/out), lpCallParams (LINECALLPARAMS*)
r1, _, err := proclinePrepareAddToConferenceW.Call(
uintptr(hConfCall),
uintptr(lphConsultCall),
uintptr(lpCallParams),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // INTfunction linePrepareAddToConferenceW(
hConfCall: DWORD; // DWORD
lphConsultCall: Pointer; // DWORD* in/out
lpCallParams: Pointer // LINECALLPARAMS*
): Integer; stdcall;
external 'TAPI32.dll' name 'linePrepareAddToConferenceW';result := DllCall("TAPI32\linePrepareAddToConferenceW"
, "UInt", hConfCall ; DWORD
, "Ptr", lphConsultCall ; DWORD* in/out
, "Ptr", lpCallParams ; LINECALLPARAMS*
, "Int") ; return: INT●linePrepareAddToConferenceW(hConfCall, lphConsultCall, lpCallParams) = DLL("TAPI32.dll", "int linePrepareAddToConferenceW(dword, void*, void*)")
# 呼び出し: linePrepareAddToConferenceW(hConfCall, lphConsultCall, lpCallParams)
# hConfCall : DWORD -> "dword"
# lphConsultCall : DWORD* in/out -> "void*"
# lpCallParams : LINECALLPARAMS* -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
# ※-W(Unicode)関数。なでしこ1はANSIのため -A 版の利用を推奨。const std = @import("std");
extern "tapi32" fn linePrepareAddToConferenceW(
hConfCall: u32, // DWORD
lphConsultCall: [*c]u32, // DWORD* in/out
lpCallParams: [*c]LINECALLPARAMS // LINECALLPARAMS*
) callconv(std.os.windows.WINAPI) i32;
// Unicode(-W): UTF-16LE のヌル終端バッファ([*c]const u16)を渡す。proc linePrepareAddToConferenceW(
hConfCall: uint32, # DWORD
lphConsultCall: ptr uint32, # DWORD* in/out
lpCallParams: ptr LINECALLPARAMS # LINECALLPARAMS*
): int32 {.importc: "linePrepareAddToConferenceW", stdcall, dynlib: "TAPI32.dll".}
# Unicode(-W): WideCString は newWideCString("...") で生成。pragma(lib, "tapi32");
extern(Windows)
int linePrepareAddToConferenceW(
uint hConfCall, // DWORD
uint* lphConsultCall, // DWORD* in/out
LINECALLPARAMS* lpCallParams // LINECALLPARAMS*
);ccall((:linePrepareAddToConferenceW, "TAPI32.dll"), stdcall, Int32,
(UInt32, Ptr{UInt32}, Ptr{LINECALLPARAMS}),
hConfCall, lphConsultCall, lpCallParams)
# hConfCall : DWORD -> UInt32
# lphConsultCall : DWORD* in/out -> Ptr{UInt32}
# lpCallParams : LINECALLPARAMS* -> Ptr{LINECALLPARAMS}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
# Unicode(-W): Cwstring には transcode(UInt16, "...") 等で UTF-16 を渡す。local ffi = require("ffi")
ffi.cdef[[
int32_t linePrepareAddToConferenceW(
uint32_t hConfCall,
uint32_t* lphConsultCall,
void* lpCallParams);
]]
local tapi32 = ffi.load("tapi32")
-- tapi32.linePrepareAddToConferenceW(hConfCall, lphConsultCall, lpCallParams)
-- hConfCall : DWORD
-- lphConsultCall : DWORD* in/out
-- lpCallParams : LINECALLPARAMS*
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
-- Unicode(-W): uint16_t* には UTF-16LE のバッファ(ffi.new("uint16_t[?]", ...))を渡す。const koffi = require('koffi');
const lib = koffi.load('TAPI32.dll');
const linePrepareAddToConferenceW = lib.func('__stdcall', 'linePrepareAddToConferenceW', 'int32_t', ['uint32_t', 'uint32_t *', 'void *']);
// linePrepareAddToConferenceW(hConfCall, lphConsultCall, lpCallParams)
// hConfCall : DWORD -> 'uint32_t'
// lphConsultCall : DWORD* in/out -> 'uint32_t *'
// lpCallParams : LINECALLPARAMS* -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("TAPI32.dll", {
linePrepareAddToConferenceW: { parameters: ["u32", "pointer", "pointer"], result: "i32" },
});
// lib.symbols.linePrepareAddToConferenceW(hConfCall, lphConsultCall, lpCallParams)
// hConfCall : DWORD -> "u32"
// lphConsultCall : DWORD* in/out -> "pointer"
// lpCallParams : LINECALLPARAMS* -> "pointer"
// 文字列は "buffer"。Unicode(-W) は new TextEncoder() ではなく UTF-16LE のバイト列(末尾に \x00\x00)を Uint8Array で渡す。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
int32_t linePrepareAddToConferenceW(
uint32_t hConfCall,
uint32_t* lphConsultCall,
void* lpCallParams);
C, "TAPI32.dll");
// $ffi->linePrepareAddToConferenceW(hConfCall, lphConsultCall, lpCallParams);
// hConfCall : DWORD
// lphConsultCall : DWORD* in/out
// lpCallParams : LINECALLPARAMS*
// 構造体/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 Tapi32 extends StdCallLibrary {
Tapi32 INSTANCE = Native.load("tapi32", Tapi32.class, W32APIOptions.UNICODE_OPTIONS);
int linePrepareAddToConferenceW(
int hConfCall, // DWORD
IntByReference lphConsultCall, // DWORD* in/out
Pointer lpCallParams // LINECALLPARAMS*
);
}
// Unicode(-W): WString(入力)/char[](出力)で UTF-16 をマーシャリング。@[Link("tapi32")]
lib LibTAPI32
fun linePrepareAddToConferenceW = linePrepareAddToConferenceW(
hConfCall : UInt32, # DWORD
lphConsultCall : UInt32*, # DWORD* in/out
lpCallParams : LINECALLPARAMS* # LINECALLPARAMS*
) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef linePrepareAddToConferenceWNative = Int32 Function(Uint32, Pointer<Uint32>, Pointer<Void>);
typedef linePrepareAddToConferenceWDart = int Function(int, Pointer<Uint32>, Pointer<Void>);
final linePrepareAddToConferenceW = DynamicLibrary.open('TAPI32.dll')
.lookupFunction<linePrepareAddToConferenceWNative, linePrepareAddToConferenceWDart>('linePrepareAddToConferenceW');
// hConfCall : DWORD -> Uint32
// lphConsultCall : DWORD* in/out -> Pointer<Uint32>
// lpCallParams : LINECALLPARAMS* -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function linePrepareAddToConferenceW(
hConfCall: DWORD; // DWORD
lphConsultCall: Pointer; // DWORD* in/out
lpCallParams: Pointer // LINECALLPARAMS*
): Integer; stdcall;
external 'TAPI32.dll' name 'linePrepareAddToConferenceW';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "linePrepareAddToConferenceW"
c_linePrepareAddToConferenceW :: Word32 -> Ptr Word32 -> Ptr () -> IO Int32
-- hConfCall : DWORD -> Word32
-- lphConsultCall : DWORD* in/out -> Ptr Word32
-- lpCallParams : LINECALLPARAMS* -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。open Ctypes
open Foreign
let lineprepareaddtoconferencew =
foreign "linePrepareAddToConferenceW"
(uint32_t @-> (ptr uint32_t) @-> (ptr void) @-> returning int32_t)
(* hConfCall : DWORD -> uint32_t *)
(* lphConsultCall : DWORD* in/out -> (ptr uint32_t) *)
(* lpCallParams : LINECALLPARAMS* -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)(cffi:define-foreign-library tapi32 (t "TAPI32.dll"))
(cffi:use-foreign-library tapi32)
(cffi:defcfun ("linePrepareAddToConferenceW" line-prepare-add-to-conference-w :convention :stdcall) :int32
(h-conf-call :uint32) ; DWORD
(lph-consult-call :pointer) ; DWORD* in/out
(lp-call-params :pointer)) ; LINECALLPARAMS*
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。use Win32::API;
my $linePrepareAddToConferenceW = Win32::API::More->new('TAPI32',
'int linePrepareAddToConferenceW(DWORD hConfCall, LPVOID lphConsultCall, LPVOID lpCallParams)');
# my $ret = $linePrepareAddToConferenceW->Call($hConfCall, $lphConsultCall, $lpCallParams);
# hConfCall : DWORD -> DWORD
# lphConsultCall : DWORD* in/out -> LPVOID
# lpCallParams : LINECALLPARAMS* -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。
# Unicode(-W): LPCWSTR/LPWSTR は Win32::API が UTF-16 変換を行う。関連項目
- f linePrepareAddToConferenceA (ANSI版) — 会議に追加する相談通話を準備して作成する(ANSI版)。
- s LINEDEVSTATUS
- f lineAddToConference — 相談通話を会議通話に追加して参加させる。
- f lineCompleteTransfer — 保留中の転送または会議への切替を完了する。
- f lineDrop — 通話を切断して終了する。
- f lineGetLineDevStatusW — 指定した回線デバイスの現在の状態を取得する(Unicode版)。
- f lineSetupConferenceW — 会議通話を設定する関数のUnicode版。
- f lineSwapHold — アクティブな通話と保留中の通話を入れ替える。