Win32 API 日本語リファレンス
ホーム › System.AddressBook › MAPIInitIdle

MAPIInitIdle

関数
MAPIのアイドルエンジンを初期化する。
DLLMAPI32.dll呼出規約winapi

シグネチャ

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

INT MAPIInitIdle(
    void* lpvReserved
);

パラメーター

名前型方向説明
lpvReservedvoid*inout予約パラメータ。NULLを指定する。MAPIのアイドル処理機構を初期化する。

戻り値の型: INT

公式ドキュメント

MAPIInitIdle 関数について説明し、構文、パラメーター、戻り値、および補足事項を示します。

戻り値

MAPIInitIdle 関数は、初期化に成功した場合は 0 を、それ以外の場合は 1 を返します。MAPIInitIdle を複数回呼び出した場合、2 回目以降の呼び出しはすべて成功しますが、参照カウントをインクリメントする以外は無視されます。

解説(Remarks)

クライアント アプリケーションまたはサービス プロバイダーは、他のアイドル エンジン関数を呼び出す前に MAPIInitIdle を呼び出す必要があります。

MAPIInitIdle の呼び出しは、後続の MAPIDeInitIdle の呼び出しと必ず対にする必要があります。そうしないと、呼び出し元のアプリケーションに対してアイドル エンジンが実行されたままになります。

次の関数は、MAPI アイドル エンジン、および FNIDLE 関数プロトタイプに基づくアイドル ルーチンを扱います。

アイドル ルーチン関数 用途
ChangeIdleRoutine
登録済みのアイドル ルーチンの特性を変更します。
DeregisterIdleRoutine
登録済みのアイドル ルーチンを MAPI システムから削除します。
EnableIdleRoutine
登録済みのアイドル ルーチンを MAPI システムから削除せずに、無効化または再度有効化します。
FtgRegisterIdleRoutine
アイドル ルーチンを MAPI システムに追加します。追加時に有効化するかどうかは選択できます。
MAPIDeInitIdle
呼び出し元のアプリケーションに対して MAPI アイドル エンジンをシャットダウンします。
MAPIInitIdle
呼び出し元のアプリケーションに対して MAPI アイドル エンジンを初期化します。

プラットフォームのすべてのフォアグラウンド タスクがアイドル状態になると、MAPI アイドル エンジンは、実行可能な状態にあるアイドル ルーチンのうち最も優先度の高いものを呼び出します。同じ優先度のアイドル ルーチン間では、呼び出し順序は保証されません。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)

各言語での呼び出し定義

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

INT MAPIInitIdle(
    void* lpvReserved
);
[DllImport("MAPI32.dll", ExactSpelling = true)]
static extern int MAPIInitIdle(
    IntPtr lpvReserved   // void* in/out
);
<DllImport("MAPI32.dll", ExactSpelling:=True)>
Public Shared Function MAPIInitIdle(
    lpvReserved As IntPtr   ' void* in/out
) As Integer
End Function
' lpvReserved : void* in/out
Declare PtrSafe Function MAPIInitIdle Lib "mapi32" ( _
    ByVal lpvReserved As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

MAPIInitIdle = ctypes.windll.mapi32.MAPIInitIdle
MAPIInitIdle.restype = ctypes.c_int
MAPIInitIdle.argtypes = [
    ctypes.POINTER(None),  # lpvReserved : void* in/out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('MAPI32.dll')
MAPIInitIdle = Fiddle::Function.new(
  lib['MAPIInitIdle'],
  [
    Fiddle::TYPE_VOIDP,  # lpvReserved : void* in/out
  ],
  Fiddle::TYPE_INT)
#[link(name = "mapi32")]
extern "system" {
    fn MAPIInitIdle(
        lpvReserved: *mut ()  // void* in/out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("MAPI32.dll")]
public static extern int MAPIInitIdle(IntPtr lpvReserved);
"@
$api = Add-Type -MemberDefinition $sig -Name 'MAPI32_MAPIInitIdle' -Namespace Win32 -PassThru
# $api::MAPIInitIdle(lpvReserved)
#uselib "MAPI32.dll"
#func global MAPIInitIdle "MAPIInitIdle" sptr
; MAPIInitIdle lpvReserved   ; 戻り値は stat
; lpvReserved : void* in/out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
#uselib "MAPI32.dll"
#cfunc global MAPIInitIdle "MAPIInitIdle" sptr
; res = MAPIInitIdle(lpvReserved)
; lpvReserved : void* in/out -> "sptr"
; INT MAPIInitIdle(void* lpvReserved)
#uselib "MAPI32.dll"
#cfunc global MAPIInitIdle "MAPIInitIdle" intptr
; res = MAPIInitIdle(lpvReserved)
; lpvReserved : void* in/out -> "intptr"
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	mapi32 = windows.NewLazySystemDLL("MAPI32.dll")
	procMAPIInitIdle = mapi32.NewProc("MAPIInitIdle")
)

// lpvReserved (void* in/out)
r1, _, err := procMAPIInitIdle.Call(
	uintptr(lpvReserved),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // INT
function MAPIInitIdle(
  lpvReserved: Pointer   // void* in/out
): Integer; stdcall;
  external 'MAPI32.dll' name 'MAPIInitIdle';
result := DllCall("MAPI32\MAPIInitIdle"
    , "Ptr", lpvReserved   ; void* in/out
    , "Int")   ; return: INT
●MAPIInitIdle(lpvReserved) = DLL("MAPI32.dll", "int MAPIInitIdle(void*)")
# 呼び出し: MAPIInitIdle(lpvReserved)
# lpvReserved : void* in/out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

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

typedef MAPIInitIdleNative = Int32 Function(Pointer<Void>);
typedef MAPIInitIdleDart = int Function(Pointer<Void>);
final MAPIInitIdle = DynamicLibrary.open('MAPI32.dll')
    .lookupFunction<MAPIInitIdleNative, MAPIInitIdleDart>('MAPIInitIdle');
// lpvReserved : void* in/out -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function MAPIInitIdle(
  lpvReserved: Pointer   // void* in/out
): Integer; stdcall;
  external 'MAPI32.dll' name 'MAPIInitIdle';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "MAPIInitIdle"
  c_MAPIInitIdle :: Ptr () -> IO Int32
-- lpvReserved : void* in/out -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let mapiinitidle =
  foreign "MAPIInitIdle"
    ((ptr void) @-> returning int32_t)
(* lpvReserved : void* in/out -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library mapi32 (t "MAPI32.dll"))
(cffi:use-foreign-library mapi32)

(cffi:defcfun ("MAPIInitIdle" mapiinit-idle :convention :stdcall) :int32
  (lpv-reserved :pointer))   ; void* in/out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $MAPIInitIdle = Win32::API::More->new('MAPI32',
    'int MAPIInitIdle(LPVOID lpvReserved)');
# my $ret = $MAPIInitIdle->Call($lpvReserved);
# lpvReserved : void* in/out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。