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

OpenTnefStreamEx

関数
アドレス帳を指定してTNEFストリームを開く拡張版。
DLLMAPI32.dll呼出規約winapi

シグネチャ

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

HRESULT OpenTnefStreamEx(
    void* lpvSupport,
    IStream* lpStream,
    CHAR* lpszStreamName,
    DWORD ulFlags,
    IMessage* lpMessage,
    WORD wKeyVal,
    IAddrBook* lpAdressBook,
    ITnef** lppTNEF
);

パラメーター

名前方向
lpvSupportvoid*inout
lpStreamIStream*in
lpszStreamNameCHAR*in
ulFlagsDWORDin
lpMessageIMessage*in
wKeyValWORDin
lpAdressBookIAddrBook*in
lppTNEFITnef**out

戻り値の型: HRESULT

各言語での呼び出し定義

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

HRESULT OpenTnefStreamEx(
    void* lpvSupport,
    IStream* lpStream,
    CHAR* lpszStreamName,
    DWORD ulFlags,
    IMessage* lpMessage,
    WORD wKeyVal,
    IAddrBook* lpAdressBook,
    ITnef** lppTNEF
);
[DllImport("MAPI32.dll", ExactSpelling = true)]
static extern int OpenTnefStreamEx(
    IntPtr lpvSupport,   // void* in/out
    IntPtr lpStream,   // IStream*
    IntPtr lpszStreamName,   // CHAR*
    uint ulFlags,   // DWORD
    IntPtr lpMessage,   // IMessage*
    ushort wKeyVal,   // WORD
    IntPtr lpAdressBook,   // IAddrBook*
    IntPtr lppTNEF   // ITnef** out
);
<DllImport("MAPI32.dll", ExactSpelling:=True)>
Public Shared Function OpenTnefStreamEx(
    lpvSupport As IntPtr,   ' void* in/out
    lpStream As IntPtr,   ' IStream*
    lpszStreamName As IntPtr,   ' CHAR*
    ulFlags As UInteger,   ' DWORD
    lpMessage As IntPtr,   ' IMessage*
    wKeyVal As UShort,   ' WORD
    lpAdressBook As IntPtr,   ' IAddrBook*
    lppTNEF As IntPtr   ' ITnef** out
) As Integer
End Function
' lpvSupport : void* in/out
' lpStream : IStream*
' lpszStreamName : CHAR*
' ulFlags : DWORD
' lpMessage : IMessage*
' wKeyVal : WORD
' lpAdressBook : IAddrBook*
' lppTNEF : ITnef** out
Declare PtrSafe Function OpenTnefStreamEx Lib "mapi32" ( _
    ByVal lpvSupport As LongPtr, _
    ByVal lpStream As LongPtr, _
    ByVal lpszStreamName As LongPtr, _
    ByVal ulFlags As Long, _
    ByVal lpMessage As LongPtr, _
    ByVal wKeyVal As Integer, _
    ByVal lpAdressBook As LongPtr, _
    ByVal lppTNEF As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

OpenTnefStreamEx = ctypes.windll.mapi32.OpenTnefStreamEx
OpenTnefStreamEx.restype = ctypes.c_int
OpenTnefStreamEx.argtypes = [
    ctypes.POINTER(None),  # lpvSupport : void* in/out
    ctypes.c_void_p,  # lpStream : IStream*
    ctypes.POINTER(ctypes.c_byte),  # lpszStreamName : CHAR*
    wintypes.DWORD,  # ulFlags : DWORD
    ctypes.c_void_p,  # lpMessage : IMessage*
    ctypes.c_ushort,  # wKeyVal : WORD
    ctypes.c_void_p,  # lpAdressBook : IAddrBook*
    ctypes.c_void_p,  # lppTNEF : ITnef** out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('MAPI32.dll')
OpenTnefStreamEx = Fiddle::Function.new(
  lib['OpenTnefStreamEx'],
  [
    Fiddle::TYPE_VOIDP,  # lpvSupport : void* in/out
    Fiddle::TYPE_VOIDP,  # lpStream : IStream*
    Fiddle::TYPE_VOIDP,  # lpszStreamName : CHAR*
    -Fiddle::TYPE_INT,  # ulFlags : DWORD
    Fiddle::TYPE_VOIDP,  # lpMessage : IMessage*
    -Fiddle::TYPE_SHORT,  # wKeyVal : WORD
    Fiddle::TYPE_VOIDP,  # lpAdressBook : IAddrBook*
    Fiddle::TYPE_VOIDP,  # lppTNEF : ITnef** out
  ],
  Fiddle::TYPE_INT)
#[link(name = "mapi32")]
extern "system" {
    fn OpenTnefStreamEx(
        lpvSupport: *mut (),  // void* in/out
        lpStream: *mut core::ffi::c_void,  // IStream*
        lpszStreamName: *mut i8,  // CHAR*
        ulFlags: u32,  // DWORD
        lpMessage: *mut core::ffi::c_void,  // IMessage*
        wKeyVal: u16,  // WORD
        lpAdressBook: *mut core::ffi::c_void,  // IAddrBook*
        lppTNEF: *mut *mut core::ffi::c_void  // ITnef** out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("MAPI32.dll")]
public static extern int OpenTnefStreamEx(IntPtr lpvSupport, IntPtr lpStream, IntPtr lpszStreamName, uint ulFlags, IntPtr lpMessage, ushort wKeyVal, IntPtr lpAdressBook, IntPtr lppTNEF);
"@
$api = Add-Type -MemberDefinition $sig -Name 'MAPI32_OpenTnefStreamEx' -Namespace Win32 -PassThru
# $api::OpenTnefStreamEx(lpvSupport, lpStream, lpszStreamName, ulFlags, lpMessage, wKeyVal, lpAdressBook, lppTNEF)
#uselib "MAPI32.dll"
#func global OpenTnefStreamEx "OpenTnefStreamEx" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; OpenTnefStreamEx lpvSupport, lpStream, varptr(lpszStreamName), ulFlags, lpMessage, wKeyVal, lpAdressBook, lppTNEF   ; 戻り値は stat
; lpvSupport : void* in/out -> "sptr"
; lpStream : IStream* -> "sptr"
; lpszStreamName : CHAR* -> "sptr"
; ulFlags : DWORD -> "sptr"
; lpMessage : IMessage* -> "sptr"
; wKeyVal : WORD -> "sptr"
; lpAdressBook : IAddrBook* -> "sptr"
; lppTNEF : ITnef** out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "MAPI32.dll"
#cfunc global OpenTnefStreamEx "OpenTnefStreamEx" sptr, sptr, var, int, sptr, int, sptr, sptr
; res = OpenTnefStreamEx(lpvSupport, lpStream, lpszStreamName, ulFlags, lpMessage, wKeyVal, lpAdressBook, lppTNEF)
; lpvSupport : void* in/out -> "sptr"
; lpStream : IStream* -> "sptr"
; lpszStreamName : CHAR* -> "var"
; ulFlags : DWORD -> "int"
; lpMessage : IMessage* -> "sptr"
; wKeyVal : WORD -> "int"
; lpAdressBook : IAddrBook* -> "sptr"
; lppTNEF : ITnef** out -> "sptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; HRESULT OpenTnefStreamEx(void* lpvSupport, IStream* lpStream, CHAR* lpszStreamName, DWORD ulFlags, IMessage* lpMessage, WORD wKeyVal, IAddrBook* lpAdressBook, ITnef** lppTNEF)
#uselib "MAPI32.dll"
#cfunc global OpenTnefStreamEx "OpenTnefStreamEx" intptr, intptr, var, int, intptr, int, intptr, intptr
; res = OpenTnefStreamEx(lpvSupport, lpStream, lpszStreamName, ulFlags, lpMessage, wKeyVal, lpAdressBook, lppTNEF)
; lpvSupport : void* in/out -> "intptr"
; lpStream : IStream* -> "intptr"
; lpszStreamName : CHAR* -> "var"
; ulFlags : DWORD -> "int"
; lpMessage : IMessage* -> "intptr"
; wKeyVal : WORD -> "int"
; lpAdressBook : IAddrBook* -> "intptr"
; lppTNEF : ITnef** out -> "intptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	mapi32 = windows.NewLazySystemDLL("MAPI32.dll")
	procOpenTnefStreamEx = mapi32.NewProc("OpenTnefStreamEx")
)

// lpvSupport (void* in/out), lpStream (IStream*), lpszStreamName (CHAR*), ulFlags (DWORD), lpMessage (IMessage*), wKeyVal (WORD), lpAdressBook (IAddrBook*), lppTNEF (ITnef** out)
r1, _, err := procOpenTnefStreamEx.Call(
	uintptr(lpvSupport),
	uintptr(lpStream),
	uintptr(lpszStreamName),
	uintptr(ulFlags),
	uintptr(lpMessage),
	uintptr(wKeyVal),
	uintptr(lpAdressBook),
	uintptr(lppTNEF),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function OpenTnefStreamEx(
  lpvSupport: Pointer;   // void* in/out
  lpStream: Pointer;   // IStream*
  lpszStreamName: Pointer;   // CHAR*
  ulFlags: DWORD;   // DWORD
  lpMessage: Pointer;   // IMessage*
  wKeyVal: Word;   // WORD
  lpAdressBook: Pointer;   // IAddrBook*
  lppTNEF: Pointer   // ITnef** out
): Integer; stdcall;
  external 'MAPI32.dll' name 'OpenTnefStreamEx';
result := DllCall("MAPI32\OpenTnefStreamEx"
    , "Ptr", lpvSupport   ; void* in/out
    , "Ptr", lpStream   ; IStream*
    , "Ptr", lpszStreamName   ; CHAR*
    , "UInt", ulFlags   ; DWORD
    , "Ptr", lpMessage   ; IMessage*
    , "UShort", wKeyVal   ; WORD
    , "Ptr", lpAdressBook   ; IAddrBook*
    , "Ptr", lppTNEF   ; ITnef** out
    , "Int")   ; return: HRESULT
●OpenTnefStreamEx(lpvSupport, lpStream, lpszStreamName, ulFlags, lpMessage, wKeyVal, lpAdressBook, lppTNEF) = DLL("MAPI32.dll", "int OpenTnefStreamEx(void*, void*, void*, dword, void*, int, void*, void*)")
# 呼び出し: OpenTnefStreamEx(lpvSupport, lpStream, lpszStreamName, ulFlags, lpMessage, wKeyVal, lpAdressBook, lppTNEF)
# lpvSupport : void* in/out -> "void*"
# lpStream : IStream* -> "void*"
# lpszStreamName : CHAR* -> "void*"
# ulFlags : DWORD -> "dword"
# lpMessage : IMessage* -> "void*"
# wKeyVal : WORD -> "int"
# lpAdressBook : IAddrBook* -> "void*"
# lppTNEF : ITnef** out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。