Win32 API 日本語リファレンス
ホームDevices.Fax › FaxInitializeEventQueue

FaxInitializeEventQueue

関数
ファクスイベント通知用のイベントキューを初期化する。
DLLWINFAX.dll呼出規約winapi

シグネチャ

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

BOOL FaxInitializeEventQueue(
    HANDLE FaxHandle,
    HANDLE CompletionPort,
    UINT_PTR CompletionKey,
    HWND hWnd,
    DWORD MessageStart
);

パラメーター

名前方向説明
FaxHandleHANDLEinFAXサーバー接続のハンドルを指定する。
CompletionPortHANDLEinイベント通知に使う入出力完了ポートのハンドルを指定する。
CompletionKeyUINT_PTRin完了ポート経由の通知に付与する識別キーを指定する。区別用の任意値。
hWndHWNDinウィンドウメッセージで通知を受け取る場合のウィンドウハンドルを指定する。NULL可。
MessageStartDWORDin通知に用いるウィンドウメッセージ番号の開始値を指定する。WM_USER以降を指定する。

戻り値の型: BOOL

各言語での呼び出し定義

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

BOOL FaxInitializeEventQueue(
    HANDLE FaxHandle,
    HANDLE CompletionPort,
    UINT_PTR CompletionKey,
    HWND hWnd,
    DWORD MessageStart
);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("WINFAX.dll", ExactSpelling = true)]
static extern bool FaxInitializeEventQueue(
    IntPtr FaxHandle,   // HANDLE
    IntPtr CompletionPort,   // HANDLE
    UIntPtr CompletionKey,   // UINT_PTR
    IntPtr hWnd,   // HWND
    uint MessageStart   // DWORD
);
<DllImport("WINFAX.dll", ExactSpelling:=True)>
Public Shared Function FaxInitializeEventQueue(
    FaxHandle As IntPtr,   ' HANDLE
    CompletionPort As IntPtr,   ' HANDLE
    CompletionKey As UIntPtr,   ' UINT_PTR
    hWnd As IntPtr,   ' HWND
    MessageStart As UInteger   ' DWORD
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
' FaxHandle : HANDLE
' CompletionPort : HANDLE
' CompletionKey : UINT_PTR
' hWnd : HWND
' MessageStart : DWORD
Declare PtrSafe Function FaxInitializeEventQueue Lib "winfax" ( _
    ByVal FaxHandle As LongPtr, _
    ByVal CompletionPort As LongPtr, _
    ByVal CompletionKey As LongPtr, _
    ByVal hWnd As LongPtr, _
    ByVal MessageStart As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

FaxInitializeEventQueue = ctypes.windll.winfax.FaxInitializeEventQueue
FaxInitializeEventQueue.restype = wintypes.BOOL
FaxInitializeEventQueue.argtypes = [
    wintypes.HANDLE,  # FaxHandle : HANDLE
    wintypes.HANDLE,  # CompletionPort : HANDLE
    ctypes.c_size_t,  # CompletionKey : UINT_PTR
    wintypes.HANDLE,  # hWnd : HWND
    wintypes.DWORD,  # MessageStart : DWORD
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('WINFAX.dll')
FaxInitializeEventQueue = Fiddle::Function.new(
  lib['FaxInitializeEventQueue'],
  [
    Fiddle::TYPE_VOIDP,  # FaxHandle : HANDLE
    Fiddle::TYPE_VOIDP,  # CompletionPort : HANDLE
    Fiddle::TYPE_UINTPTR_T,  # CompletionKey : UINT_PTR
    Fiddle::TYPE_VOIDP,  # hWnd : HWND
    -Fiddle::TYPE_INT,  # MessageStart : DWORD
  ],
  Fiddle::TYPE_INT)
#[link(name = "winfax")]
extern "system" {
    fn FaxInitializeEventQueue(
        FaxHandle: *mut core::ffi::c_void,  // HANDLE
        CompletionPort: *mut core::ffi::c_void,  // HANDLE
        CompletionKey: usize,  // UINT_PTR
        hWnd: *mut core::ffi::c_void,  // HWND
        MessageStart: u32  // DWORD
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("WINFAX.dll")]
public static extern bool FaxInitializeEventQueue(IntPtr FaxHandle, IntPtr CompletionPort, UIntPtr CompletionKey, IntPtr hWnd, uint MessageStart);
"@
$api = Add-Type -MemberDefinition $sig -Name 'WINFAX_FaxInitializeEventQueue' -Namespace Win32 -PassThru
# $api::FaxInitializeEventQueue(FaxHandle, CompletionPort, CompletionKey, hWnd, MessageStart)
#uselib "WINFAX.dll"
#func global FaxInitializeEventQueue "FaxInitializeEventQueue" sptr, sptr, sptr, sptr, sptr
; FaxInitializeEventQueue FaxHandle, CompletionPort, CompletionKey, hWnd, MessageStart   ; 戻り値は stat
; FaxHandle : HANDLE -> "sptr"
; CompletionPort : HANDLE -> "sptr"
; CompletionKey : UINT_PTR -> "sptr"
; hWnd : HWND -> "sptr"
; MessageStart : DWORD -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
#uselib "WINFAX.dll"
#cfunc global FaxInitializeEventQueue "FaxInitializeEventQueue" sptr, sptr, sptr, sptr, int
; res = FaxInitializeEventQueue(FaxHandle, CompletionPort, CompletionKey, hWnd, MessageStart)
; FaxHandle : HANDLE -> "sptr"
; CompletionPort : HANDLE -> "sptr"
; CompletionKey : UINT_PTR -> "sptr"
; hWnd : HWND -> "sptr"
; MessageStart : DWORD -> "int"
; BOOL FaxInitializeEventQueue(HANDLE FaxHandle, HANDLE CompletionPort, UINT_PTR CompletionKey, HWND hWnd, DWORD MessageStart)
#uselib "WINFAX.dll"
#cfunc global FaxInitializeEventQueue "FaxInitializeEventQueue" intptr, intptr, intptr, intptr, int
; res = FaxInitializeEventQueue(FaxHandle, CompletionPort, CompletionKey, hWnd, MessageStart)
; FaxHandle : HANDLE -> "intptr"
; CompletionPort : HANDLE -> "intptr"
; CompletionKey : UINT_PTR -> "intptr"
; hWnd : HWND -> "intptr"
; MessageStart : DWORD -> "int"
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	winfax = windows.NewLazySystemDLL("WINFAX.dll")
	procFaxInitializeEventQueue = winfax.NewProc("FaxInitializeEventQueue")
)

// FaxHandle (HANDLE), CompletionPort (HANDLE), CompletionKey (UINT_PTR), hWnd (HWND), MessageStart (DWORD)
r1, _, err := procFaxInitializeEventQueue.Call(
	uintptr(FaxHandle),
	uintptr(CompletionPort),
	uintptr(CompletionKey),
	uintptr(hWnd),
	uintptr(MessageStart),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // BOOL
function FaxInitializeEventQueue(
  FaxHandle: THandle;   // HANDLE
  CompletionPort: THandle;   // HANDLE
  CompletionKey: NativeUInt;   // UINT_PTR
  hWnd: THandle;   // HWND
  MessageStart: DWORD   // DWORD
): BOOL; stdcall;
  external 'WINFAX.dll' name 'FaxInitializeEventQueue';
result := DllCall("WINFAX\FaxInitializeEventQueue"
    , "Ptr", FaxHandle   ; HANDLE
    , "Ptr", CompletionPort   ; HANDLE
    , "UPtr", CompletionKey   ; UINT_PTR
    , "Ptr", hWnd   ; HWND
    , "UInt", MessageStart   ; DWORD
    , "Int")   ; return: BOOL
●FaxInitializeEventQueue(FaxHandle, CompletionPort, CompletionKey, hWnd, MessageStart) = DLL("WINFAX.dll", "bool FaxInitializeEventQueue(void*, void*, int, void*, dword)")
# 呼び出し: FaxInitializeEventQueue(FaxHandle, CompletionPort, CompletionKey, hWnd, MessageStart)
# FaxHandle : HANDLE -> "void*"
# CompletionPort : HANDLE -> "void*"
# CompletionKey : UINT_PTR -> "int"
# hWnd : HWND -> "void*"
# MessageStart : DWORD -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "winfax" fn FaxInitializeEventQueue(
    FaxHandle: ?*anyopaque, // HANDLE
    CompletionPort: ?*anyopaque, // HANDLE
    CompletionKey: usize, // UINT_PTR
    hWnd: ?*anyopaque, // HWND
    MessageStart: u32 // DWORD
) callconv(std.os.windows.WINAPI) i32;
proc FaxInitializeEventQueue(
    FaxHandle: pointer,  # HANDLE
    CompletionPort: pointer,  # HANDLE
    CompletionKey: uint,  # UINT_PTR
    hWnd: pointer,  # HWND
    MessageStart: uint32  # DWORD
): int32 {.importc: "FaxInitializeEventQueue", stdcall, dynlib: "WINFAX.dll".}
pragma(lib, "winfax");
extern(Windows)
int FaxInitializeEventQueue(
    void* FaxHandle,   // HANDLE
    void* CompletionPort,   // HANDLE
    size_t CompletionKey,   // UINT_PTR
    void* hWnd,   // HWND
    uint MessageStart   // DWORD
);
ccall((:FaxInitializeEventQueue, "WINFAX.dll"), stdcall, Int32,
      (Ptr{Cvoid}, Ptr{Cvoid}, Csize_t, Ptr{Cvoid}, UInt32),
      FaxHandle, CompletionPort, CompletionKey, hWnd, MessageStart)
# FaxHandle : HANDLE -> Ptr{Cvoid}
# CompletionPort : HANDLE -> Ptr{Cvoid}
# CompletionKey : UINT_PTR -> Csize_t
# hWnd : HWND -> Ptr{Cvoid}
# MessageStart : DWORD -> UInt32
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t FaxInitializeEventQueue(
    void* FaxHandle,
    void* CompletionPort,
    uintptr_t CompletionKey,
    void* hWnd,
    uint32_t MessageStart);
]]
local winfax = ffi.load("winfax")
-- winfax.FaxInitializeEventQueue(FaxHandle, CompletionPort, CompletionKey, hWnd, MessageStart)
-- FaxHandle : HANDLE
-- CompletionPort : HANDLE
-- CompletionKey : UINT_PTR
-- hWnd : HWND
-- MessageStart : DWORD
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('WINFAX.dll');
const FaxInitializeEventQueue = lib.func('__stdcall', 'FaxInitializeEventQueue', 'int32_t', ['void *', 'void *', 'uintptr_t', 'void *', 'uint32_t']);
// FaxInitializeEventQueue(FaxHandle, CompletionPort, CompletionKey, hWnd, MessageStart)
// FaxHandle : HANDLE -> 'void *'
// CompletionPort : HANDLE -> 'void *'
// CompletionKey : UINT_PTR -> 'uintptr_t'
// hWnd : HWND -> 'void *'
// MessageStart : DWORD -> 'uint32_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("WINFAX.dll", {
  FaxInitializeEventQueue: { parameters: ["pointer", "pointer", "usize", "pointer", "u32"], result: "i32" },
});
// lib.symbols.FaxInitializeEventQueue(FaxHandle, CompletionPort, CompletionKey, hWnd, MessageStart)
// FaxHandle : HANDLE -> "pointer"
// CompletionPort : HANDLE -> "pointer"
// CompletionKey : UINT_PTR -> "usize"
// hWnd : HWND -> "pointer"
// MessageStart : DWORD -> "u32"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t FaxInitializeEventQueue(
    void* FaxHandle,
    void* CompletionPort,
    size_t CompletionKey,
    void* hWnd,
    uint32_t MessageStart);
C, "WINFAX.dll");
// $ffi->FaxInitializeEventQueue(FaxHandle, CompletionPort, CompletionKey, hWnd, MessageStart);
// FaxHandle : HANDLE
// CompletionPort : HANDLE
// CompletionKey : UINT_PTR
// hWnd : HWND
// MessageStart : DWORD
// 構造体/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 Winfax extends StdCallLibrary {
    Winfax INSTANCE = Native.load("winfax", Winfax.class);
    boolean FaxInitializeEventQueue(
        Pointer FaxHandle,   // HANDLE
        Pointer CompletionPort,   // HANDLE
        long CompletionKey,   // UINT_PTR
        Pointer hWnd,   // HWND
        int MessageStart   // DWORD
    );
}
@[Link("winfax")]
lib LibWINFAX
  fun FaxInitializeEventQueue = FaxInitializeEventQueue(
    FaxHandle : Void*,   # HANDLE
    CompletionPort : Void*,   # HANDLE
    CompletionKey : LibC::SizeT,   # UINT_PTR
    hWnd : Void*,   # HWND
    MessageStart : UInt32   # DWORD
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef FaxInitializeEventQueueNative = Int32 Function(Pointer<Void>, Pointer<Void>, UintPtr, Pointer<Void>, Uint32);
typedef FaxInitializeEventQueueDart = int Function(Pointer<Void>, Pointer<Void>, int, Pointer<Void>, int);
final FaxInitializeEventQueue = DynamicLibrary.open('WINFAX.dll')
    .lookupFunction<FaxInitializeEventQueueNative, FaxInitializeEventQueueDart>('FaxInitializeEventQueue');
// FaxHandle : HANDLE -> Pointer<Void>
// CompletionPort : HANDLE -> Pointer<Void>
// CompletionKey : UINT_PTR -> UintPtr
// hWnd : HWND -> Pointer<Void>
// MessageStart : DWORD -> Uint32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function FaxInitializeEventQueue(
  FaxHandle: THandle;   // HANDLE
  CompletionPort: THandle;   // HANDLE
  CompletionKey: NativeUInt;   // UINT_PTR
  hWnd: THandle;   // HWND
  MessageStart: DWORD   // DWORD
): BOOL; stdcall;
  external 'WINFAX.dll' name 'FaxInitializeEventQueue';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "FaxInitializeEventQueue"
  c_FaxInitializeEventQueue :: Ptr () -> Ptr () -> CUIntPtr -> Ptr () -> Word32 -> IO CInt
-- FaxHandle : HANDLE -> Ptr ()
-- CompletionPort : HANDLE -> Ptr ()
-- CompletionKey : UINT_PTR -> CUIntPtr
-- hWnd : HWND -> Ptr ()
-- MessageStart : DWORD -> Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let faxinitializeeventqueue =
  foreign "FaxInitializeEventQueue"
    ((ptr void) @-> (ptr void) @-> size_t @-> (ptr void) @-> uint32_t @-> returning int32_t)
(* FaxHandle : HANDLE -> (ptr void) *)
(* CompletionPort : HANDLE -> (ptr void) *)
(* CompletionKey : UINT_PTR -> size_t *)
(* hWnd : HWND -> (ptr void) *)
(* MessageStart : DWORD -> uint32_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library winfax (t "WINFAX.dll"))
(cffi:use-foreign-library winfax)

(cffi:defcfun ("FaxInitializeEventQueue" fax-initialize-event-queue :convention :stdcall) :int32
  (fax-handle :pointer)   ; HANDLE
  (completion-port :pointer)   ; HANDLE
  (completion-key :uint64)   ; UINT_PTR
  (h-wnd :pointer)   ; HWND
  (message-start :uint32))   ; DWORD
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $FaxInitializeEventQueue = Win32::API::More->new('WINFAX',
    'BOOL FaxInitializeEventQueue(HANDLE FaxHandle, HANDLE CompletionPort, WPARAM CompletionKey, HANDLE hWnd, DWORD MessageStart)');
# my $ret = $FaxInitializeEventQueue->Call($FaxHandle, $CompletionPort, $CompletionKey, $hWnd, $MessageStart);
# FaxHandle : HANDLE -> HANDLE
# CompletionPort : HANDLE -> HANDLE
# CompletionKey : UINT_PTR -> WPARAM
# hWnd : HWND -> HANDLE
# MessageStart : DWORD -> DWORD
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。