ホーム › System.Ole › OleCreateLinkEx
OleCreateLinkEx
関数拡張オプション付きでモニカからリンクオブジェクトを作成する。
シグネチャ
// ole32.dll
#include <windows.h>
HRESULT OleCreateLinkEx(
IMoniker* pmkLinkSrc,
const GUID* riid,
OLECREATE dwFlags,
DWORD renderopt,
DWORD cFormats,
DWORD* rgAdvf,
FORMATETC* rgFormatEtc,
IAdviseSink* lpAdviseSink,
DWORD* rgdwConnection,
IOleClientSite* pClientSite,
IStorage* pStg,
void** ppvObj
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| pmkLinkSrc | IMoniker* | in |
| riid | GUID* | in |
| dwFlags | OLECREATE | in |
| renderopt | DWORD | in |
| cFormats | DWORD | in |
| rgAdvf | DWORD* | in |
| rgFormatEtc | FORMATETC* | in |
| lpAdviseSink | IAdviseSink* | in |
| rgdwConnection | DWORD* | out |
| pClientSite | IOleClientSite* | in |
| pStg | IStorage* | in |
| ppvObj | void** | out |
戻り値の型: HRESULT
各言語での呼び出し定義
// ole32.dll
#include <windows.h>
HRESULT OleCreateLinkEx(
IMoniker* pmkLinkSrc,
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 OleCreateLinkEx(
IntPtr pmkLinkSrc, // IMoniker*
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 OleCreateLinkEx(
pmkLinkSrc As IntPtr, ' IMoniker*
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' pmkLinkSrc : IMoniker*
' 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 OleCreateLinkEx Lib "ole32" ( _
ByVal pmkLinkSrc 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
OleCreateLinkEx = ctypes.windll.ole32.OleCreateLinkEx
OleCreateLinkEx.restype = ctypes.c_int
OleCreateLinkEx.argtypes = [
ctypes.c_void_p, # pmkLinkSrc : IMoniker*
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')
OleCreateLinkEx = Fiddle::Function.new(
lib['OleCreateLinkEx'],
[
Fiddle::TYPE_VOIDP, # pmkLinkSrc : IMoniker*
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 OleCreateLinkEx(
pmkLinkSrc: *mut core::ffi::c_void, // IMoniker*
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 OleCreateLinkEx(IntPtr pmkLinkSrc, 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_OleCreateLinkEx' -Namespace Win32 -PassThru
# $api::OleCreateLinkEx(pmkLinkSrc, riid, dwFlags, renderopt, cFormats, rgAdvf, rgFormatEtc, lpAdviseSink, rgdwConnection, pClientSite, pStg, ppvObj)#uselib "ole32.dll"
#func global OleCreateLinkEx "OleCreateLinkEx" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; OleCreateLinkEx pmkLinkSrc, varptr(riid), dwFlags, renderopt, cFormats, varptr(rgAdvf), varptr(rgFormatEtc), lpAdviseSink, varptr(rgdwConnection), pClientSite, pStg, ppvObj ; 戻り値は stat
; pmkLinkSrc : IMoniker* -> "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 OleCreateLinkEx "OleCreateLinkEx" sptr, var, int, int, int, var, var, sptr, var, sptr, sptr, sptr ; res = OleCreateLinkEx(pmkLinkSrc, riid, dwFlags, renderopt, cFormats, rgAdvf, rgFormatEtc, lpAdviseSink, rgdwConnection, pClientSite, pStg, ppvObj) ; pmkLinkSrc : IMoniker* -> "sptr" ; 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 方式にも切替可。#uselib "ole32.dll" #cfunc global OleCreateLinkEx "OleCreateLinkEx" sptr, sptr, int, int, int, sptr, sptr, sptr, sptr, sptr, sptr, sptr ; res = OleCreateLinkEx(pmkLinkSrc, varptr(riid), dwFlags, renderopt, cFormats, varptr(rgAdvf), varptr(rgFormatEtc), lpAdviseSink, varptr(rgdwConnection), pClientSite, pStg, ppvObj) ; pmkLinkSrc : IMoniker* -> "sptr" ; riid : GUID* -> "sptr" ; dwFlags : OLECREATE -> "int" ; renderopt : DWORD -> "int" ; cFormats : DWORD -> "int" ; rgAdvf : DWORD* -> "sptr" ; rgFormatEtc : FORMATETC* -> "sptr" ; lpAdviseSink : IAdviseSink* -> "sptr" ; rgdwConnection : DWORD* out -> "sptr" ; pClientSite : IOleClientSite* -> "sptr" ; pStg : IStorage* -> "sptr" ; ppvObj : void** out -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
出力引数:
; HRESULT OleCreateLinkEx(IMoniker* pmkLinkSrc, 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 OleCreateLinkEx "OleCreateLinkEx" intptr, var, int, int, int, var, var, intptr, var, intptr, intptr, intptr ; res = OleCreateLinkEx(pmkLinkSrc, riid, dwFlags, renderopt, cFormats, rgAdvf, rgFormatEtc, lpAdviseSink, rgdwConnection, pClientSite, pStg, ppvObj) ; pmkLinkSrc : IMoniker* -> "intptr" ; 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 方式にも切替可。; HRESULT OleCreateLinkEx(IMoniker* pmkLinkSrc, 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 OleCreateLinkEx "OleCreateLinkEx" intptr, intptr, int, int, int, intptr, intptr, intptr, intptr, intptr, intptr, intptr ; res = OleCreateLinkEx(pmkLinkSrc, varptr(riid), dwFlags, renderopt, cFormats, varptr(rgAdvf), varptr(rgFormatEtc), lpAdviseSink, varptr(rgdwConnection), pClientSite, pStg, ppvObj) ; pmkLinkSrc : IMoniker* -> "intptr" ; riid : GUID* -> "intptr" ; dwFlags : OLECREATE -> "int" ; renderopt : DWORD -> "int" ; cFormats : DWORD -> "int" ; rgAdvf : DWORD* -> "intptr" ; rgFormatEtc : FORMATETC* -> "intptr" ; lpAdviseSink : IAdviseSink* -> "intptr" ; rgdwConnection : DWORD* out -> "intptr" ; pClientSite : IOleClientSite* -> "intptr" ; pStg : IStorage* -> "intptr" ; ppvObj : void** out -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
ole32 = windows.NewLazySystemDLL("ole32.dll")
procOleCreateLinkEx = ole32.NewProc("OleCreateLinkEx")
)
// pmkLinkSrc (IMoniker*), 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 := procOleCreateLinkEx.Call(
uintptr(pmkLinkSrc),
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 // HRESULTfunction OleCreateLinkEx(
pmkLinkSrc: Pointer; // IMoniker*
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 'OleCreateLinkEx';result := DllCall("ole32\OleCreateLinkEx"
, "Ptr", pmkLinkSrc ; IMoniker*
, "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●OleCreateLinkEx(pmkLinkSrc, riid, dwFlags, renderopt, cFormats, rgAdvf, rgFormatEtc, lpAdviseSink, rgdwConnection, pClientSite, pStg, ppvObj) = DLL("ole32.dll", "int OleCreateLinkEx(void*, void*, dword, dword, dword, void*, void*, void*, void*, void*, void*, void*)")
# 呼び出し: OleCreateLinkEx(pmkLinkSrc, riid, dwFlags, renderopt, cFormats, rgAdvf, rgFormatEtc, lpAdviseSink, rgdwConnection, pClientSite, pStg, ppvObj)
# pmkLinkSrc : IMoniker* -> "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)。