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

OleCreateEx

関数
複数フォーマットやアドバイズを指定して埋め込みOLEオブジェクトを作成する。
DLLole32.dll呼出規約winapi対応OSWindows 2000 以降

シグネチャ

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

HRESULT OleCreateEx(
    const GUID* rclsid,
    const GUID* riid,
    OLECREATE dwFlags,
    DWORD renderopt,
    DWORD cFormats,
    DWORD* rgAdvf,
    FORMATETC* rgFormatEtc,
    IAdviseSink* lpAdviseSink,
    DWORD* rgdwConnection,
    IOleClientSite* pClientSite,
    IStorage* pStg,
    void** ppvObj
);

パラメーター

名前方向
rclsidGUID*in
riidGUID*in
dwFlagsOLECREATEin
renderoptDWORDin
cFormatsDWORDin
rgAdvfDWORD*in
rgFormatEtcFORMATETC*in
lpAdviseSinkIAdviseSink*in
rgdwConnectionDWORD*out
pClientSiteIOleClientSite*in
pStgIStorage*in
ppvObjvoid**out

戻り値の型: HRESULT

各言語での呼び出し定義

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

HRESULT OleCreateEx(
    const GUID* rclsid,
    const GUID* riid,
    OLECREATE dwFlags,
    DWORD renderopt,
    DWORD cFormats,
    DWORD* rgAdvf,
    FORMATETC* rgFormatEtc,
    IAdviseSink* lpAdviseSink,
    DWORD* rgdwConnection,
    IOleClientSite* pClientSite,
    IStorage* pStg,
    void** ppvObj
);
[DllImport("ole32.dll", ExactSpelling = true)]
static extern int OleCreateEx(
    ref Guid rclsid,   // GUID*
    ref Guid riid,   // GUID*
    uint dwFlags,   // OLECREATE
    uint renderopt,   // DWORD
    uint cFormats,   // DWORD
    ref uint rgAdvf,   // DWORD*
    IntPtr rgFormatEtc,   // FORMATETC*
    IntPtr lpAdviseSink,   // IAdviseSink*
    out uint rgdwConnection,   // DWORD* out
    IntPtr pClientSite,   // IOleClientSite*
    IntPtr pStg,   // IStorage*
    IntPtr ppvObj   // void** out
);
<DllImport("ole32.dll", ExactSpelling:=True)>
Public Shared Function OleCreateEx(
    ByRef rclsid As Guid,   ' GUID*
    ByRef riid As Guid,   ' GUID*
    dwFlags As UInteger,   ' OLECREATE
    renderopt As UInteger,   ' DWORD
    cFormats As UInteger,   ' DWORD
    ByRef rgAdvf As UInteger,   ' DWORD*
    rgFormatEtc As IntPtr,   ' FORMATETC*
    lpAdviseSink As IntPtr,   ' IAdviseSink*
    <Out> ByRef rgdwConnection As UInteger,   ' DWORD* out
    pClientSite As IntPtr,   ' IOleClientSite*
    pStg As IntPtr,   ' IStorage*
    ppvObj As IntPtr   ' void** out
) As Integer
End Function
' rclsid : GUID*
' riid : GUID*
' dwFlags : OLECREATE
' renderopt : DWORD
' cFormats : DWORD
' rgAdvf : DWORD*
' rgFormatEtc : FORMATETC*
' lpAdviseSink : IAdviseSink*
' rgdwConnection : DWORD* out
' pClientSite : IOleClientSite*
' pStg : IStorage*
' ppvObj : void** out
Declare PtrSafe Function OleCreateEx Lib "ole32" ( _
    ByVal rclsid As LongPtr, _
    ByVal riid As LongPtr, _
    ByVal dwFlags As Long, _
    ByVal renderopt As Long, _
    ByVal cFormats As Long, _
    ByRef rgAdvf As Long, _
    ByVal rgFormatEtc As LongPtr, _
    ByVal lpAdviseSink As LongPtr, _
    ByRef rgdwConnection As Long, _
    ByVal pClientSite As LongPtr, _
    ByVal pStg As LongPtr, _
    ByVal ppvObj As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

OleCreateEx = ctypes.windll.ole32.OleCreateEx
OleCreateEx.restype = ctypes.c_int
OleCreateEx.argtypes = [
    ctypes.c_void_p,  # rclsid : GUID*
    ctypes.c_void_p,  # riid : GUID*
    wintypes.DWORD,  # dwFlags : OLECREATE
    wintypes.DWORD,  # renderopt : DWORD
    wintypes.DWORD,  # cFormats : DWORD
    ctypes.POINTER(wintypes.DWORD),  # rgAdvf : DWORD*
    ctypes.c_void_p,  # rgFormatEtc : FORMATETC*
    ctypes.c_void_p,  # lpAdviseSink : IAdviseSink*
    ctypes.POINTER(wintypes.DWORD),  # rgdwConnection : DWORD* out
    ctypes.c_void_p,  # pClientSite : IOleClientSite*
    ctypes.c_void_p,  # pStg : IStorage*
    ctypes.c_void_p,  # ppvObj : void** out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('ole32.dll')
OleCreateEx = Fiddle::Function.new(
  lib['OleCreateEx'],
  [
    Fiddle::TYPE_VOIDP,  # rclsid : GUID*
    Fiddle::TYPE_VOIDP,  # riid : GUID*
    -Fiddle::TYPE_INT,  # dwFlags : OLECREATE
    -Fiddle::TYPE_INT,  # renderopt : DWORD
    -Fiddle::TYPE_INT,  # cFormats : DWORD
    Fiddle::TYPE_VOIDP,  # rgAdvf : DWORD*
    Fiddle::TYPE_VOIDP,  # rgFormatEtc : FORMATETC*
    Fiddle::TYPE_VOIDP,  # lpAdviseSink : IAdviseSink*
    Fiddle::TYPE_VOIDP,  # rgdwConnection : DWORD* out
    Fiddle::TYPE_VOIDP,  # pClientSite : IOleClientSite*
    Fiddle::TYPE_VOIDP,  # pStg : IStorage*
    Fiddle::TYPE_VOIDP,  # ppvObj : void** out
  ],
  Fiddle::TYPE_INT)
#[link(name = "ole32")]
extern "system" {
    fn OleCreateEx(
        rclsid: *const GUID,  // GUID*
        riid: *const GUID,  // GUID*
        dwFlags: u32,  // OLECREATE
        renderopt: u32,  // DWORD
        cFormats: u32,  // DWORD
        rgAdvf: *mut u32,  // DWORD*
        rgFormatEtc: *mut FORMATETC,  // FORMATETC*
        lpAdviseSink: *mut core::ffi::c_void,  // IAdviseSink*
        rgdwConnection: *mut u32,  // DWORD* out
        pClientSite: *mut core::ffi::c_void,  // IOleClientSite*
        pStg: *mut core::ffi::c_void,  // IStorage*
        ppvObj: *mut *mut ()  // void** out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("ole32.dll")]
public static extern int OleCreateEx(ref Guid rclsid, ref Guid riid, uint dwFlags, uint renderopt, uint cFormats, ref uint rgAdvf, IntPtr rgFormatEtc, IntPtr lpAdviseSink, out uint rgdwConnection, IntPtr pClientSite, IntPtr pStg, IntPtr ppvObj);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ole32_OleCreateEx' -Namespace Win32 -PassThru
# $api::OleCreateEx(rclsid, riid, dwFlags, renderopt, cFormats, rgAdvf, rgFormatEtc, lpAdviseSink, rgdwConnection, pClientSite, pStg, ppvObj)
#uselib "ole32.dll"
#func global OleCreateEx "OleCreateEx" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; OleCreateEx varptr(rclsid), varptr(riid), dwFlags, renderopt, cFormats, varptr(rgAdvf), varptr(rgFormatEtc), lpAdviseSink, varptr(rgdwConnection), pClientSite, pStg, ppvObj   ; 戻り値は stat
; rclsid : GUID* -> "sptr"
; riid : GUID* -> "sptr"
; dwFlags : OLECREATE -> "sptr"
; renderopt : DWORD -> "sptr"
; cFormats : DWORD -> "sptr"
; rgAdvf : DWORD* -> "sptr"
; rgFormatEtc : FORMATETC* -> "sptr"
; lpAdviseSink : IAdviseSink* -> "sptr"
; rgdwConnection : DWORD* out -> "sptr"
; pClientSite : IOleClientSite* -> "sptr"
; pStg : IStorage* -> "sptr"
; ppvObj : void** out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "ole32.dll"
#cfunc global OleCreateEx "OleCreateEx" var, var, int, int, int, var, var, sptr, var, sptr, sptr, sptr
; res = OleCreateEx(rclsid, riid, dwFlags, renderopt, cFormats, rgAdvf, rgFormatEtc, lpAdviseSink, rgdwConnection, pClientSite, pStg, ppvObj)
; rclsid : GUID* -> "var"
; riid : GUID* -> "var"
; dwFlags : OLECREATE -> "int"
; renderopt : DWORD -> "int"
; cFormats : DWORD -> "int"
; rgAdvf : DWORD* -> "var"
; rgFormatEtc : FORMATETC* -> "var"
; lpAdviseSink : IAdviseSink* -> "sptr"
; rgdwConnection : DWORD* out -> "var"
; pClientSite : IOleClientSite* -> "sptr"
; pStg : IStorage* -> "sptr"
; ppvObj : void** out -> "sptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; HRESULT OleCreateEx(GUID* rclsid, GUID* riid, OLECREATE dwFlags, DWORD renderopt, DWORD cFormats, DWORD* rgAdvf, FORMATETC* rgFormatEtc, IAdviseSink* lpAdviseSink, DWORD* rgdwConnection, IOleClientSite* pClientSite, IStorage* pStg, void** ppvObj)
#uselib "ole32.dll"
#cfunc global OleCreateEx "OleCreateEx" var, var, int, int, int, var, var, intptr, var, intptr, intptr, intptr
; res = OleCreateEx(rclsid, riid, dwFlags, renderopt, cFormats, rgAdvf, rgFormatEtc, lpAdviseSink, rgdwConnection, pClientSite, pStg, ppvObj)
; rclsid : GUID* -> "var"
; riid : GUID* -> "var"
; dwFlags : OLECREATE -> "int"
; renderopt : DWORD -> "int"
; cFormats : DWORD -> "int"
; rgAdvf : DWORD* -> "var"
; rgFormatEtc : FORMATETC* -> "var"
; lpAdviseSink : IAdviseSink* -> "intptr"
; rgdwConnection : DWORD* out -> "var"
; pClientSite : IOleClientSite* -> "intptr"
; pStg : IStorage* -> "intptr"
; ppvObj : void** out -> "intptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	ole32 = windows.NewLazySystemDLL("ole32.dll")
	procOleCreateEx = ole32.NewProc("OleCreateEx")
)

// rclsid (GUID*), riid (GUID*), dwFlags (OLECREATE), renderopt (DWORD), cFormats (DWORD), rgAdvf (DWORD*), rgFormatEtc (FORMATETC*), lpAdviseSink (IAdviseSink*), rgdwConnection (DWORD* out), pClientSite (IOleClientSite*), pStg (IStorage*), ppvObj (void** out)
r1, _, err := procOleCreateEx.Call(
	uintptr(rclsid),
	uintptr(riid),
	uintptr(dwFlags),
	uintptr(renderopt),
	uintptr(cFormats),
	uintptr(rgAdvf),
	uintptr(rgFormatEtc),
	uintptr(lpAdviseSink),
	uintptr(rgdwConnection),
	uintptr(pClientSite),
	uintptr(pStg),
	uintptr(ppvObj),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function OleCreateEx(
  rclsid: PGUID;   // GUID*
  riid: PGUID;   // GUID*
  dwFlags: DWORD;   // OLECREATE
  renderopt: DWORD;   // DWORD
  cFormats: DWORD;   // DWORD
  rgAdvf: Pointer;   // DWORD*
  rgFormatEtc: Pointer;   // FORMATETC*
  lpAdviseSink: Pointer;   // IAdviseSink*
  rgdwConnection: Pointer;   // DWORD* out
  pClientSite: Pointer;   // IOleClientSite*
  pStg: Pointer;   // IStorage*
  ppvObj: Pointer   // void** out
): Integer; stdcall;
  external 'ole32.dll' name 'OleCreateEx';
result := DllCall("ole32\OleCreateEx"
    , "Ptr", rclsid   ; GUID*
    , "Ptr", riid   ; GUID*
    , "UInt", dwFlags   ; OLECREATE
    , "UInt", renderopt   ; DWORD
    , "UInt", cFormats   ; DWORD
    , "Ptr", rgAdvf   ; DWORD*
    , "Ptr", rgFormatEtc   ; FORMATETC*
    , "Ptr", lpAdviseSink   ; IAdviseSink*
    , "Ptr", rgdwConnection   ; DWORD* out
    , "Ptr", pClientSite   ; IOleClientSite*
    , "Ptr", pStg   ; IStorage*
    , "Ptr", ppvObj   ; void** out
    , "Int")   ; return: HRESULT
●OleCreateEx(rclsid, riid, dwFlags, renderopt, cFormats, rgAdvf, rgFormatEtc, lpAdviseSink, rgdwConnection, pClientSite, pStg, ppvObj) = DLL("ole32.dll", "int OleCreateEx(void*, void*, dword, dword, dword, void*, void*, void*, void*, void*, void*, void*)")
# 呼び出し: OleCreateEx(rclsid, riid, dwFlags, renderopt, cFormats, rgAdvf, rgFormatEtc, lpAdviseSink, rgdwConnection, pClientSite, pStg, ppvObj)
# rclsid : GUID* -> "void*"
# riid : GUID* -> "void*"
# dwFlags : OLECREATE -> "dword"
# renderopt : DWORD -> "dword"
# cFormats : DWORD -> "dword"
# rgAdvf : DWORD* -> "void*"
# rgFormatEtc : FORMATETC* -> "void*"
# lpAdviseSink : IAdviseSink* -> "void*"
# rgdwConnection : DWORD* out -> "void*"
# pClientSite : IOleClientSite* -> "void*"
# pStg : IStorage* -> "void*"
# ppvObj : void** out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。