ホーム › System.Com.StructuredStorage › StgPropertyLengthAsVariant
StgPropertyLengthAsVariant
関数シリアル化プロパティをPROPVARIANTにした場合のサイズを算出する。
シグネチャ
// ole32.dll
#include <windows.h>
DWORD StgPropertyLengthAsVariant(
const SERIALIZEDPROPERTYVALUE* pProp,
DWORD cbProp,
WORD CodePage,
BYTE bReserved // optional
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| pProp | SERIALIZEDPROPERTYVALUE* | in |
| cbProp | DWORD | in |
| CodePage | WORD | in |
| bReserved | BYTE | optional |
戻り値の型: DWORD
各言語での呼び出し定義
// ole32.dll
#include <windows.h>
DWORD StgPropertyLengthAsVariant(
const SERIALIZEDPROPERTYVALUE* pProp,
DWORD cbProp,
WORD CodePage,
BYTE bReserved // optional
);[DllImport("ole32.dll", ExactSpelling = true)]
static extern uint StgPropertyLengthAsVariant(
IntPtr pProp, // SERIALIZEDPROPERTYVALUE*
uint cbProp, // DWORD
ushort CodePage, // WORD
byte bReserved // BYTE optional
);<DllImport("ole32.dll", ExactSpelling:=True)>
Public Shared Function StgPropertyLengthAsVariant(
pProp As IntPtr, ' SERIALIZEDPROPERTYVALUE*
cbProp As UInteger, ' DWORD
CodePage As UShort, ' WORD
bReserved As Byte ' BYTE optional
) As UInteger
End Function' pProp : SERIALIZEDPROPERTYVALUE*
' cbProp : DWORD
' CodePage : WORD
' bReserved : BYTE optional
Declare PtrSafe Function StgPropertyLengthAsVariant Lib "ole32" ( _
ByVal pProp As LongPtr, _
ByVal cbProp As Long, _
ByVal CodePage As Integer, _
ByVal bReserved As Byte) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
StgPropertyLengthAsVariant = ctypes.windll.ole32.StgPropertyLengthAsVariant
StgPropertyLengthAsVariant.restype = wintypes.DWORD
StgPropertyLengthAsVariant.argtypes = [
ctypes.c_void_p, # pProp : SERIALIZEDPROPERTYVALUE*
wintypes.DWORD, # cbProp : DWORD
ctypes.c_ushort, # CodePage : WORD
ctypes.c_ubyte, # bReserved : BYTE optional
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('ole32.dll')
StgPropertyLengthAsVariant = Fiddle::Function.new(
lib['StgPropertyLengthAsVariant'],
[
Fiddle::TYPE_VOIDP, # pProp : SERIALIZEDPROPERTYVALUE*
-Fiddle::TYPE_INT, # cbProp : DWORD
-Fiddle::TYPE_SHORT, # CodePage : WORD
-Fiddle::TYPE_CHAR, # bReserved : BYTE optional
],
-Fiddle::TYPE_INT)#[link(name = "ole32")]
extern "system" {
fn StgPropertyLengthAsVariant(
pProp: *const SERIALIZEDPROPERTYVALUE, // SERIALIZEDPROPERTYVALUE*
cbProp: u32, // DWORD
CodePage: u16, // WORD
bReserved: u8 // BYTE optional
) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("ole32.dll")]
public static extern uint StgPropertyLengthAsVariant(IntPtr pProp, uint cbProp, ushort CodePage, byte bReserved);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ole32_StgPropertyLengthAsVariant' -Namespace Win32 -PassThru
# $api::StgPropertyLengthAsVariant(pProp, cbProp, CodePage, bReserved)#uselib "ole32.dll"
#func global StgPropertyLengthAsVariant "StgPropertyLengthAsVariant" sptr, sptr, sptr, sptr
; StgPropertyLengthAsVariant varptr(pProp), cbProp, CodePage, bReserved ; 戻り値は stat
; pProp : SERIALIZEDPROPERTYVALUE* -> "sptr"
; cbProp : DWORD -> "sptr"
; CodePage : WORD -> "sptr"
; bReserved : BYTE optional -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。出力引数:
#uselib "ole32.dll" #cfunc global StgPropertyLengthAsVariant "StgPropertyLengthAsVariant" var, int, int, int ; res = StgPropertyLengthAsVariant(pProp, cbProp, CodePage, bReserved) ; pProp : SERIALIZEDPROPERTYVALUE* -> "var" ; cbProp : DWORD -> "int" ; CodePage : WORD -> "int" ; bReserved : BYTE optional -> "int" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "ole32.dll" #cfunc global StgPropertyLengthAsVariant "StgPropertyLengthAsVariant" sptr, int, int, int ; res = StgPropertyLengthAsVariant(varptr(pProp), cbProp, CodePage, bReserved) ; pProp : SERIALIZEDPROPERTYVALUE* -> "sptr" ; cbProp : DWORD -> "int" ; CodePage : WORD -> "int" ; bReserved : BYTE optional -> "int" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
出力引数:
; DWORD StgPropertyLengthAsVariant(SERIALIZEDPROPERTYVALUE* pProp, DWORD cbProp, WORD CodePage, BYTE bReserved) #uselib "ole32.dll" #cfunc global StgPropertyLengthAsVariant "StgPropertyLengthAsVariant" var, int, int, int ; res = StgPropertyLengthAsVariant(pProp, cbProp, CodePage, bReserved) ; pProp : SERIALIZEDPROPERTYVALUE* -> "var" ; cbProp : DWORD -> "int" ; CodePage : WORD -> "int" ; bReserved : BYTE optional -> "int" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; DWORD StgPropertyLengthAsVariant(SERIALIZEDPROPERTYVALUE* pProp, DWORD cbProp, WORD CodePage, BYTE bReserved) #uselib "ole32.dll" #cfunc global StgPropertyLengthAsVariant "StgPropertyLengthAsVariant" intptr, int, int, int ; res = StgPropertyLengthAsVariant(varptr(pProp), cbProp, CodePage, bReserved) ; pProp : SERIALIZEDPROPERTYVALUE* -> "intptr" ; cbProp : DWORD -> "int" ; CodePage : WORD -> "int" ; bReserved : BYTE optional -> "int" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
ole32 = windows.NewLazySystemDLL("ole32.dll")
procStgPropertyLengthAsVariant = ole32.NewProc("StgPropertyLengthAsVariant")
)
// pProp (SERIALIZEDPROPERTYVALUE*), cbProp (DWORD), CodePage (WORD), bReserved (BYTE optional)
r1, _, err := procStgPropertyLengthAsVariant.Call(
uintptr(pProp),
uintptr(cbProp),
uintptr(CodePage),
uintptr(bReserved),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // DWORDfunction StgPropertyLengthAsVariant(
pProp: Pointer; // SERIALIZEDPROPERTYVALUE*
cbProp: DWORD; // DWORD
CodePage: Word; // WORD
bReserved: Byte // BYTE optional
): DWORD; stdcall;
external 'ole32.dll' name 'StgPropertyLengthAsVariant';result := DllCall("ole32\StgPropertyLengthAsVariant"
, "Ptr", pProp ; SERIALIZEDPROPERTYVALUE*
, "UInt", cbProp ; DWORD
, "UShort", CodePage ; WORD
, "UChar", bReserved ; BYTE optional
, "UInt") ; return: DWORD●StgPropertyLengthAsVariant(pProp, cbProp, CodePage, bReserved) = DLL("ole32.dll", "dword StgPropertyLengthAsVariant(void*, dword, int, byte)")
# 呼び出し: StgPropertyLengthAsVariant(pProp, cbProp, CodePage, bReserved)
# pProp : SERIALIZEDPROPERTYVALUE* -> "void*"
# cbProp : DWORD -> "dword"
# CodePage : WORD -> "int"
# bReserved : BYTE optional -> "byte"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。