Win32 API 日本語リファレンス
ホームNetworking.WindowsWebServices › WS_CHANNEL_ENCODER

WS_CHANNEL_ENCODER

構造体
サイズx64: 56 バイト / x86: 28 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
createContextvoid*8/4+0+0各エンコーダ生成時にコールバックへ渡されるユーザー定義のコンテキストポインタ。
createEncoderCallbackWS_CREATE_ENCODER_CALLBACK8/4+8+4新しいエンコーダインスタンスを生成するコールバック関数。
encoderGetContentTypeCallbackWS_ENCODER_GET_CONTENT_TYPE_CALLBACK8/4+16+8出力するメッセージのContent-Typeを取得するコールバック関数。
encoderStartCallbackWS_ENCODER_START_CALLBACK8/4+24+12メッセージのエンコード開始を通知するコールバック関数。
encoderEncodeCallbackWS_ENCODER_ENCODE_CALLBACK8/4+32+16メッセージ本体のバイト列をエンコードするコールバック関数。
encoderEndCallbackWS_ENCODER_END_CALLBACK8/4+40+20メッセージのエンコード完了を通知するコールバック関数。
freeEncoderCallbackWS_FREE_ENCODER_CALLBACK8/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 Structure
import 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: pointer
struct 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 変数を確保