ホーム › Networking.WindowsWebServices › WS_CHANNEL_ENCODER
WS_CHANNEL_ENCODER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| createContext | void* | 8/4 | +0 | +0 | 各エンコーダ生成時にコールバックへ渡されるユーザー定義のコンテキストポインタ。 |
| createEncoderCallback | WS_CREATE_ENCODER_CALLBACK | 8/4 | +8 | +4 | 新しいエンコーダインスタンスを生成するコールバック関数。 |
| encoderGetContentTypeCallback | WS_ENCODER_GET_CONTENT_TYPE_CALLBACK | 8/4 | +16 | +8 | 出力するメッセージのContent-Typeを取得するコールバック関数。 |
| encoderStartCallback | WS_ENCODER_START_CALLBACK | 8/4 | +24 | +12 | メッセージのエンコード開始を通知するコールバック関数。 |
| encoderEncodeCallback | WS_ENCODER_ENCODE_CALLBACK | 8/4 | +32 | +16 | メッセージ本体のバイト列をエンコードするコールバック関数。 |
| encoderEndCallback | WS_ENCODER_END_CALLBACK | 8/4 | +40 | +20 | メッセージのエンコード完了を通知するコールバック関数。 |
| freeEncoderCallback | WS_FREE_ENCODER_CALLBACK | 8/4 | +48 | +24 | エンコーダインスタンスを解放するコールバック関数。 |
各言語での定義
#include <windows.h>
// WS_CHANNEL_ENCODER (x64 56 / x86 28 バイト)
typedef struct WS_CHANNEL_ENCODER {
void* createContext;
WS_CREATE_ENCODER_CALLBACK createEncoderCallback;
WS_ENCODER_GET_CONTENT_TYPE_CALLBACK encoderGetContentTypeCallback;
WS_ENCODER_START_CALLBACK encoderStartCallback;
WS_ENCODER_ENCODE_CALLBACK encoderEncodeCallback;
WS_ENCODER_END_CALLBACK encoderEndCallback;
WS_FREE_ENCODER_CALLBACK freeEncoderCallback;
} WS_CHANNEL_ENCODER;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WS_CHANNEL_ENCODER
{
public IntPtr createContext;
public IntPtr createEncoderCallback;
public IntPtr encoderGetContentTypeCallback;
public IntPtr encoderStartCallback;
public IntPtr encoderEncodeCallback;
public IntPtr encoderEndCallback;
public IntPtr freeEncoderCallback;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WS_CHANNEL_ENCODER
Public createContext As IntPtr
Public createEncoderCallback As IntPtr
Public encoderGetContentTypeCallback As IntPtr
Public encoderStartCallback As IntPtr
Public encoderEncodeCallback As IntPtr
Public encoderEndCallback As IntPtr
Public freeEncoderCallback As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class WS_CHANNEL_ENCODER(ctypes.Structure):
_fields_ = [
("createContext", ctypes.c_void_p),
("createEncoderCallback", ctypes.c_void_p),
("encoderGetContentTypeCallback", ctypes.c_void_p),
("encoderStartCallback", ctypes.c_void_p),
("encoderEncodeCallback", ctypes.c_void_p),
("encoderEndCallback", ctypes.c_void_p),
("freeEncoderCallback", ctypes.c_void_p),
]#[repr(C)]
pub struct WS_CHANNEL_ENCODER {
pub createContext: *mut core::ffi::c_void,
pub createEncoderCallback: *mut core::ffi::c_void,
pub encoderGetContentTypeCallback: *mut core::ffi::c_void,
pub encoderStartCallback: *mut core::ffi::c_void,
pub encoderEncodeCallback: *mut core::ffi::c_void,
pub encoderEndCallback: *mut core::ffi::c_void,
pub freeEncoderCallback: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type WS_CHANNEL_ENCODER struct {
createContext uintptr
createEncoderCallback uintptr
encoderGetContentTypeCallback uintptr
encoderStartCallback uintptr
encoderEncodeCallback uintptr
encoderEndCallback uintptr
freeEncoderCallback uintptr
}type
WS_CHANNEL_ENCODER = record
createContext: Pointer;
createEncoderCallback: Pointer;
encoderGetContentTypeCallback: Pointer;
encoderStartCallback: Pointer;
encoderEncodeCallback: Pointer;
encoderEndCallback: Pointer;
freeEncoderCallback: Pointer;
end;const WS_CHANNEL_ENCODER = extern struct {
createContext: ?*anyopaque,
createEncoderCallback: ?*anyopaque,
encoderGetContentTypeCallback: ?*anyopaque,
encoderStartCallback: ?*anyopaque,
encoderEncodeCallback: ?*anyopaque,
encoderEndCallback: ?*anyopaque,
freeEncoderCallback: ?*anyopaque,
};type
WS_CHANNEL_ENCODER {.bycopy.} = object
createContext: pointer
createEncoderCallback: pointer
encoderGetContentTypeCallback: pointer
encoderStartCallback: pointer
encoderEncodeCallback: pointer
encoderEndCallback: pointer
freeEncoderCallback: pointerstruct WS_CHANNEL_ENCODER
{
void* createContext;
void* createEncoderCallback;
void* encoderGetContentTypeCallback;
void* encoderStartCallback;
void* encoderEncodeCallback;
void* encoderEndCallback;
void* freeEncoderCallback;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WS_CHANNEL_ENCODER サイズ: 28 バイト(x86)
dim st, 7 ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; createContext : void* (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; createEncoderCallback : WS_CREATE_ENCODER_CALLBACK (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; encoderGetContentTypeCallback : WS_ENCODER_GET_CONTENT_TYPE_CALLBACK (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; encoderStartCallback : WS_ENCODER_START_CALLBACK (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; encoderEncodeCallback : WS_ENCODER_ENCODE_CALLBACK (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; encoderEndCallback : WS_ENCODER_END_CALLBACK (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; freeEncoderCallback : WS_FREE_ENCODER_CALLBACK (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WS_CHANNEL_ENCODER サイズ: 56 バイト(x64)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; createContext : void* (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; createEncoderCallback : WS_CREATE_ENCODER_CALLBACK (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; encoderGetContentTypeCallback : WS_ENCODER_GET_CONTENT_TYPE_CALLBACK (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; encoderStartCallback : WS_ENCODER_START_CALLBACK (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; encoderEncodeCallback : WS_ENCODER_ENCODE_CALLBACK (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; encoderEndCallback : WS_ENCODER_END_CALLBACK (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; freeEncoderCallback : WS_FREE_ENCODER_CALLBACK (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WS_CHANNEL_ENCODER
#field intptr createContext
#field intptr createEncoderCallback
#field intptr encoderGetContentTypeCallback
#field intptr encoderStartCallback
#field intptr encoderEncodeCallback
#field intptr encoderEndCallback
#field intptr freeEncoderCallback
#endstruct
stdim st, WS_CHANNEL_ENCODER ; NSTRUCT 変数を確保