linePrepareAddToConference
関数シグネチャ
// TAPI32.dll (ANSI / -A)
#include <windows.h>
INT linePrepareAddToConference(
DWORD hConfCall,
DWORD* lphConsultCall,
const LINECALLPARAMS* lpCallParams
);パラメーター
| 名前 | 型 | 方向 | 説明 |
|---|---|---|---|
| hConfCall | DWORD | in | 会議通話へのハンドル。アプリケーションはこの通話の所有者である必要があります。hConfCall の通話状態は connected である必要があります。 |
| lphConsultCall | DWORD* | inout | HCALL ハンドルへのポインター。この場所には、追加対象となる相談通話を識別するハンドルが格納されます。当初は、アプリケーションがこの通話の唯一の所有者となります。 |
| lpCallParams | LINECALLPARAMS* | in | 相談通話を確立するときに使用する通話パラメーターを格納した LINECALLPARAMS 構造体へのポインター。特別な通話セットアップパラメーターが不要な場合、このパラメーターには NULL を指定できます。 |
戻り値の型: INT
公式ドキュメント
linePrepareAddToConference 関数 (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 を使用して、相談通話と保留中の会議通話を切り替えられる場合もあります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// TAPI32.dll (ANSI / -A)
#include <windows.h>
INT linePrepareAddToConference(
DWORD hConfCall,
DWORD* lphConsultCall,
const LINECALLPARAMS* lpCallParams
);[DllImport("TAPI32.dll", CharSet = CharSet.Ansi, ExactSpelling = true)]
static extern int linePrepareAddToConference(
uint hConfCall, // DWORD
ref uint lphConsultCall, // DWORD* in/out
IntPtr lpCallParams // LINECALLPARAMS*
);<DllImport("TAPI32.dll", CharSet:=CharSet.Ansi, ExactSpelling:=True)>
Public Shared Function linePrepareAddToConference(
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 linePrepareAddToConference Lib "tapi32" ( _
ByVal hConfCall As Long, _
ByRef lphConsultCall As Long, _
ByVal lpCallParams As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
linePrepareAddToConference = ctypes.windll.tapi32.linePrepareAddToConference
linePrepareAddToConference.restype = ctypes.c_int
linePrepareAddToConference.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')
linePrepareAddToConference = Fiddle::Function.new(
lib['linePrepareAddToConference'],
[
-Fiddle::TYPE_INT, # hConfCall : DWORD
Fiddle::TYPE_VOIDP, # lphConsultCall : DWORD* in/out
Fiddle::TYPE_VOIDP, # lpCallParams : LINECALLPARAMS*
],
Fiddle::TYPE_INT)#[link(name = "tapi32")]
extern "system" {
fn linePrepareAddToConference(
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.Ansi)]
public static extern int linePrepareAddToConference(uint hConfCall, ref uint lphConsultCall, IntPtr lpCallParams);
"@
$api = Add-Type -MemberDefinition $sig -Name 'TAPI32_linePrepareAddToConference' -Namespace Win32 -PassThru
# $api::linePrepareAddToConference(hConfCall, lphConsultCall, lpCallParams)#uselib "TAPI32.dll"
#func global linePrepareAddToConference "linePrepareAddToConference" sptr, sptr, sptr
; linePrepareAddToConference hConfCall, varptr(lphConsultCall), varptr(lpCallParams) ; 戻り値は stat
; hConfCall : DWORD -> "sptr"
; lphConsultCall : DWORD* in/out -> "sptr"
; lpCallParams : LINECALLPARAMS* -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。#uselib "TAPI32.dll" #cfunc global linePrepareAddToConference "linePrepareAddToConference" int, var, var ; res = linePrepareAddToConference(hConfCall, lphConsultCall, lpCallParams) ; hConfCall : DWORD -> "int" ; lphConsultCall : DWORD* in/out -> "var" ; lpCallParams : LINECALLPARAMS* -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "TAPI32.dll" #cfunc global linePrepareAddToConference "linePrepareAddToConference" int, sptr, sptr ; res = linePrepareAddToConference(hConfCall, varptr(lphConsultCall), varptr(lpCallParams)) ; hConfCall : DWORD -> "int" ; lphConsultCall : DWORD* in/out -> "sptr" ; lpCallParams : LINECALLPARAMS* -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
; INT linePrepareAddToConference(DWORD hConfCall, DWORD* lphConsultCall, LINECALLPARAMS* lpCallParams) #uselib "TAPI32.dll" #cfunc global linePrepareAddToConference "linePrepareAddToConference" int, var, var ; res = linePrepareAddToConference(hConfCall, lphConsultCall, lpCallParams) ; hConfCall : DWORD -> "int" ; lphConsultCall : DWORD* in/out -> "var" ; lpCallParams : LINECALLPARAMS* -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; INT linePrepareAddToConference(DWORD hConfCall, DWORD* lphConsultCall, LINECALLPARAMS* lpCallParams) #uselib "TAPI32.dll" #cfunc global linePrepareAddToConference "linePrepareAddToConference" int, intptr, intptr ; res = linePrepareAddToConference(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")
proclinePrepareAddToConference = tapi32.NewProc("linePrepareAddToConference")
)
// hConfCall (DWORD), lphConsultCall (DWORD* in/out), lpCallParams (LINECALLPARAMS*)
r1, _, err := proclinePrepareAddToConference.Call(
uintptr(hConfCall),
uintptr(lphConsultCall),
uintptr(lpCallParams),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // INTfunction linePrepareAddToConference(
hConfCall: DWORD; // DWORD
lphConsultCall: Pointer; // DWORD* in/out
lpCallParams: Pointer // LINECALLPARAMS*
): Integer; stdcall;
external 'TAPI32.dll' name 'linePrepareAddToConference';result := DllCall("TAPI32\linePrepareAddToConference"
, "UInt", hConfCall ; DWORD
, "Ptr", lphConsultCall ; DWORD* in/out
, "Ptr", lpCallParams ; LINECALLPARAMS*
, "Int") ; return: INT●linePrepareAddToConference(hConfCall, lphConsultCall, lpCallParams) = DLL("TAPI32.dll", "int linePrepareAddToConference(dword, void*, void*)")
# 呼び出し: linePrepareAddToConference(hConfCall, lphConsultCall, lpCallParams)
# hConfCall : DWORD -> "dword"
# lphConsultCall : DWORD* in/out -> "void*"
# lpCallParams : LINECALLPARAMS* -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。const std = @import("std");
extern "tapi32" fn linePrepareAddToConference(
hConfCall: u32, // DWORD
lphConsultCall: [*c]u32, // DWORD* in/out
lpCallParams: [*c]LINECALLPARAMS // LINECALLPARAMS*
) callconv(std.os.windows.WINAPI) i32;proc linePrepareAddToConference(
hConfCall: uint32, # DWORD
lphConsultCall: ptr uint32, # DWORD* in/out
lpCallParams: ptr LINECALLPARAMS # LINECALLPARAMS*
): int32 {.importc: "linePrepareAddToConference", stdcall, dynlib: "TAPI32.dll".}pragma(lib, "tapi32");
extern(Windows)
int linePrepareAddToConference(
uint hConfCall, // DWORD
uint* lphConsultCall, // DWORD* in/out
LINECALLPARAMS* lpCallParams // LINECALLPARAMS*
);ccall((:linePrepareAddToConference, "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 では無視)。local ffi = require("ffi")
ffi.cdef[[
int32_t linePrepareAddToConference(
uint32_t hConfCall,
uint32_t* lphConsultCall,
void* lpCallParams);
]]
local tapi32 = ffi.load("tapi32")
-- tapi32.linePrepareAddToConference(hConfCall, lphConsultCall, lpCallParams)
-- hConfCall : DWORD
-- lphConsultCall : DWORD* in/out
-- lpCallParams : LINECALLPARAMS*
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。const koffi = require('koffi');
const lib = koffi.load('TAPI32.dll');
const linePrepareAddToConference = lib.func('__stdcall', 'linePrepareAddToConference', 'int32_t', ['uint32_t', 'uint32_t *', 'void *']);
// linePrepareAddToConference(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", {
linePrepareAddToConference: { parameters: ["u32", "pointer", "pointer"], result: "i32" },
});
// lib.symbols.linePrepareAddToConference(hConfCall, lphConsultCall, lpCallParams)
// hConfCall : DWORD -> "u32"
// lphConsultCall : DWORD* in/out -> "pointer"
// lpCallParams : LINECALLPARAMS* -> "pointer"
// 文字列は "buffer"。ANSI(-A) は new TextEncoder() で UTF-8/ANSI バイト列(末尾に \x00)を渡す。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
int32_t linePrepareAddToConference(
uint32_t hConfCall,
uint32_t* lphConsultCall,
void* lpCallParams);
C, "TAPI32.dll");
// $ffi->linePrepareAddToConference(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.ASCII_OPTIONS);
int linePrepareAddToConference(
int hConfCall, // DWORD
IntByReference lphConsultCall, // DWORD* in/out
Pointer lpCallParams // LINECALLPARAMS*
);
}@[Link("tapi32")]
lib LibTAPI32
fun linePrepareAddToConference = linePrepareAddToConference(
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 linePrepareAddToConferenceNative = Int32 Function(Uint32, Pointer<Uint32>, Pointer<Void>);
typedef linePrepareAddToConferenceDart = int Function(int, Pointer<Uint32>, Pointer<Void>);
final linePrepareAddToConference = DynamicLibrary.open('TAPI32.dll')
.lookupFunction<linePrepareAddToConferenceNative, linePrepareAddToConferenceDart>('linePrepareAddToConference');
// hConfCall : DWORD -> Uint32
// lphConsultCall : DWORD* in/out -> Pointer<Uint32>
// lpCallParams : LINECALLPARAMS* -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function linePrepareAddToConference(
hConfCall: DWORD; // DWORD
lphConsultCall: Pointer; // DWORD* in/out
lpCallParams: Pointer // LINECALLPARAMS*
): Integer; stdcall;
external 'TAPI32.dll' name 'linePrepareAddToConference';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "linePrepareAddToConference"
c_linePrepareAddToConference :: 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 lineprepareaddtoconference =
foreign "linePrepareAddToConference"
(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 ("linePrepareAddToConference" line-prepare-add-to-conference :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 $linePrepareAddToConference = Win32::API::More->new('TAPI32',
'int linePrepareAddToConference(DWORD hConfCall, LPVOID lphConsultCall, LPVOID lpCallParams)');
# my $ret = $linePrepareAddToConference->Call($hConfCall, $lphConsultCall, $lpCallParams);
# hConfCall : DWORD -> DWORD
# lphConsultCall : DWORD* in/out -> LPVOID
# lpCallParams : LINECALLPARAMS* -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。関連項目
- f linePrepareAddToConferenceA (ANSI版) — 会議に追加する相談通話を準備して作成する(ANSI版)。
- f linePrepareAddToConferenceW (Unicode版) — 会議に追加する相談通話を準備して作成する(Unicode版)。
- s LINEDEVSTATUS
- f lineAddToConference — 相談通話を会議通話に追加して参加させる。
- f lineCompleteTransfer — 保留中の転送または会議への切替を完了する。
- f lineDrop — 通話を切断して終了する。
- f lineGetLineDevStatusA — 指定した回線デバイスの現在の状態を取得する(ANSI版)。
- f lineSetupConferenceA — 会議通話を設定する関数のANSI版。
- f lineSwapHold — アクティブな通話と保留中の通話を入れ替える。