ホーム › System.Ole › OleCreatePropertyFrame
OleCreatePropertyFrame
関数オブジェクトのプロパティページを表示するダイアログを生成する。
シグネチャ
// OLEAUT32.dll
#include <windows.h>
HRESULT OleCreatePropertyFrame(
HWND hwndOwner,
DWORD x,
DWORD y,
LPCWSTR lpszCaption,
DWORD cObjects,
IUnknown** ppUnk,
DWORD cPages,
GUID* pPageClsID,
DWORD lcid,
DWORD dwReserved,
void* pvReserved
);パラメーター
| 名前 | 型 | 方向 | 説明 |
|---|---|---|---|
| hwndOwner | HWND | in | 生成されるプロパティシートのダイアログボックスの親ウィンドウへのハンドルです。 |
| x | DWORD | in | 予約済み。hwndOwner を基準としたダイアログボックスの水平位置です。 |
| y | DWORD | in | 予約済み。hwndOwner を基準としたダイアログボックスの垂直位置です。 |
| lpszCaption | LPCWSTR | in | ダイアログボックスのキャプションに使用する文字列へのポインターです。 |
| cObjects | DWORD | in | ppUnk で渡されるオブジェクトポインターの数です。 |
| ppUnk | IUnknown** | in | このプロパティシートの呼び出し対象となるオブジェクトに対する IUnknown ポインターの配列です。配列の要素数は cObjects で指定されます。これらのポインターは、IPropertyPage::SetObjects を通じて各プロパティページへ渡されます。 |
| cPages | DWORD | in | pPageCIsID で指定されるプロパティページの数です。 |
| pPageClsID | GUID* | in | プロパティシートに表示する各プロパティページの CLSID を格納した、サイズ cPages の配列です。 |
| lcid | DWORD | in | プロパティシートに使用するロケール識別子です。プロパティページは、IPropertyPageSite::GetLocaleID を通じてこの識別子を取得できます。 |
| dwReserved | DWORD | in | 将来の使用のために予約されています。0 を指定する必要があります。 |
| pvReserved | void* | in | 将来の使用のために予約されています。NULL を指定する必要があります。 |
戻り値の型: HRESULT
公式ドキュメント
新しいプロパティフレーム、すなわちプロパティシートのダイアログボックスを呼び出します。このダイアログの親ウィンドウは hwndOwner であり、親ウィンドウ内の点 (x,y) に配置され、キャプションは lpszCaption になります。
戻り値
この関数は、標準の戻り値である E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTED に加えて、以下の値をサポートします。
| 戻り値 | 説明 |
|---|---|
| ダイアログボックスが正常に呼び出され、動作しました。 | |
| lpszCaption、ppUnk、または pPageCIsID のアドレスが無効です。たとえば、これらのいずれかが NULL である場合などです。 |
解説(Remarks)
表示するプロパティページは pPageClsID で識別されます。これは cPages 個の CLSID 値からなる配列です。このプロパティシートの対象となるオブジェクトは ppUnk で識別されます。これは IUnknown ポインターを格納したサイズ cObjects の配列です。
この関数は常にモーダルダイアログボックスを作成し、そのダイアログボックスが閉じられるまで制御を返しません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// OLEAUT32.dll
#include <windows.h>
HRESULT OleCreatePropertyFrame(
HWND hwndOwner,
DWORD x,
DWORD y,
LPCWSTR lpszCaption,
DWORD cObjects,
IUnknown** ppUnk,
DWORD cPages,
GUID* pPageClsID,
DWORD lcid,
DWORD dwReserved,
void* pvReserved
);[DllImport("OLEAUT32.dll", ExactSpelling = true)]
static extern int OleCreatePropertyFrame(
IntPtr hwndOwner, // HWND
uint x, // DWORD
uint y, // DWORD
[MarshalAs(UnmanagedType.LPWStr)] string lpszCaption, // LPCWSTR
uint cObjects, // DWORD
IntPtr ppUnk, // IUnknown**
uint cPages, // DWORD
ref Guid pPageClsID, // GUID*
uint lcid, // DWORD
uint dwReserved, // DWORD
IntPtr pvReserved // void*
);<DllImport("OLEAUT32.dll", ExactSpelling:=True)>
Public Shared Function OleCreatePropertyFrame(
hwndOwner As IntPtr, ' HWND
x As UInteger, ' DWORD
y As UInteger, ' DWORD
<MarshalAs(UnmanagedType.LPWStr)> lpszCaption As String, ' LPCWSTR
cObjects As UInteger, ' DWORD
ppUnk As IntPtr, ' IUnknown**
cPages As UInteger, ' DWORD
ByRef pPageClsID As Guid, ' GUID*
lcid As UInteger, ' DWORD
dwReserved As UInteger, ' DWORD
pvReserved As IntPtr ' void*
) As Integer
End Function' hwndOwner : HWND
' x : DWORD
' y : DWORD
' lpszCaption : LPCWSTR
' cObjects : DWORD
' ppUnk : IUnknown**
' cPages : DWORD
' pPageClsID : GUID*
' lcid : DWORD
' dwReserved : DWORD
' pvReserved : void*
Declare PtrSafe Function OleCreatePropertyFrame Lib "oleaut32" ( _
ByVal hwndOwner As LongPtr, _
ByVal x As Long, _
ByVal y As Long, _
ByVal lpszCaption As LongPtr, _
ByVal cObjects As Long, _
ByVal ppUnk As LongPtr, _
ByVal cPages As Long, _
ByVal pPageClsID As LongPtr, _
ByVal lcid As Long, _
ByVal dwReserved As Long, _
ByVal pvReserved As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
OleCreatePropertyFrame = ctypes.windll.oleaut32.OleCreatePropertyFrame
OleCreatePropertyFrame.restype = ctypes.c_int
OleCreatePropertyFrame.argtypes = [
wintypes.HANDLE, # hwndOwner : HWND
wintypes.DWORD, # x : DWORD
wintypes.DWORD, # y : DWORD
wintypes.LPCWSTR, # lpszCaption : LPCWSTR
wintypes.DWORD, # cObjects : DWORD
ctypes.c_void_p, # ppUnk : IUnknown**
wintypes.DWORD, # cPages : DWORD
ctypes.c_void_p, # pPageClsID : GUID*
wintypes.DWORD, # lcid : DWORD
wintypes.DWORD, # dwReserved : DWORD
ctypes.POINTER(None), # pvReserved : void*
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('OLEAUT32.dll')
OleCreatePropertyFrame = Fiddle::Function.new(
lib['OleCreatePropertyFrame'],
[
Fiddle::TYPE_VOIDP, # hwndOwner : HWND
-Fiddle::TYPE_INT, # x : DWORD
-Fiddle::TYPE_INT, # y : DWORD
Fiddle::TYPE_VOIDP, # lpszCaption : LPCWSTR
-Fiddle::TYPE_INT, # cObjects : DWORD
Fiddle::TYPE_VOIDP, # ppUnk : IUnknown**
-Fiddle::TYPE_INT, # cPages : DWORD
Fiddle::TYPE_VOIDP, # pPageClsID : GUID*
-Fiddle::TYPE_INT, # lcid : DWORD
-Fiddle::TYPE_INT, # dwReserved : DWORD
Fiddle::TYPE_VOIDP, # pvReserved : void*
],
Fiddle::TYPE_INT)#[link(name = "oleaut32")]
extern "system" {
fn OleCreatePropertyFrame(
hwndOwner: *mut core::ffi::c_void, // HWND
x: u32, // DWORD
y: u32, // DWORD
lpszCaption: *const u16, // LPCWSTR
cObjects: u32, // DWORD
ppUnk: *mut *mut core::ffi::c_void, // IUnknown**
cPages: u32, // DWORD
pPageClsID: *mut GUID, // GUID*
lcid: u32, // DWORD
dwReserved: u32, // DWORD
pvReserved: *mut () // void*
) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("OLEAUT32.dll")]
public static extern int OleCreatePropertyFrame(IntPtr hwndOwner, uint x, uint y, [MarshalAs(UnmanagedType.LPWStr)] string lpszCaption, uint cObjects, IntPtr ppUnk, uint cPages, ref Guid pPageClsID, uint lcid, uint dwReserved, IntPtr pvReserved);
"@
$api = Add-Type -MemberDefinition $sig -Name 'OLEAUT32_OleCreatePropertyFrame' -Namespace Win32 -PassThru
# $api::OleCreatePropertyFrame(hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, pPageClsID, lcid, dwReserved, pvReserved)#uselib "OLEAUT32.dll"
#func global OleCreatePropertyFrame "OleCreatePropertyFrame" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; OleCreatePropertyFrame hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, varptr(pPageClsID), lcid, dwReserved, pvReserved ; 戻り値は stat
; hwndOwner : HWND -> "sptr"
; x : DWORD -> "sptr"
; y : DWORD -> "sptr"
; lpszCaption : LPCWSTR -> "sptr"
; cObjects : DWORD -> "sptr"
; ppUnk : IUnknown** -> "sptr"
; cPages : DWORD -> "sptr"
; pPageClsID : GUID* -> "sptr"
; lcid : DWORD -> "sptr"
; dwReserved : DWORD -> "sptr"
; pvReserved : void* -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。出力引数:
#uselib "OLEAUT32.dll" #cfunc global OleCreatePropertyFrame "OleCreatePropertyFrame" sptr, int, int, wstr, int, sptr, int, var, int, int, sptr ; res = OleCreatePropertyFrame(hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, pPageClsID, lcid, dwReserved, pvReserved) ; hwndOwner : HWND -> "sptr" ; x : DWORD -> "int" ; y : DWORD -> "int" ; lpszCaption : LPCWSTR -> "wstr" ; cObjects : DWORD -> "int" ; ppUnk : IUnknown** -> "sptr" ; cPages : DWORD -> "int" ; pPageClsID : GUID* -> "var" ; lcid : DWORD -> "int" ; dwReserved : DWORD -> "int" ; pvReserved : void* -> "sptr" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "OLEAUT32.dll" #cfunc global OleCreatePropertyFrame "OleCreatePropertyFrame" sptr, int, int, wstr, int, sptr, int, sptr, int, int, sptr ; res = OleCreatePropertyFrame(hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, varptr(pPageClsID), lcid, dwReserved, pvReserved) ; hwndOwner : HWND -> "sptr" ; x : DWORD -> "int" ; y : DWORD -> "int" ; lpszCaption : LPCWSTR -> "wstr" ; cObjects : DWORD -> "int" ; ppUnk : IUnknown** -> "sptr" ; cPages : DWORD -> "int" ; pPageClsID : GUID* -> "sptr" ; lcid : DWORD -> "int" ; dwReserved : DWORD -> "int" ; pvReserved : void* -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
出力引数:
; HRESULT OleCreatePropertyFrame(HWND hwndOwner, DWORD x, DWORD y, LPCWSTR lpszCaption, DWORD cObjects, IUnknown** ppUnk, DWORD cPages, GUID* pPageClsID, DWORD lcid, DWORD dwReserved, void* pvReserved) #uselib "OLEAUT32.dll" #cfunc global OleCreatePropertyFrame "OleCreatePropertyFrame" intptr, int, int, wstr, int, intptr, int, var, int, int, intptr ; res = OleCreatePropertyFrame(hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, pPageClsID, lcid, dwReserved, pvReserved) ; hwndOwner : HWND -> "intptr" ; x : DWORD -> "int" ; y : DWORD -> "int" ; lpszCaption : LPCWSTR -> "wstr" ; cObjects : DWORD -> "int" ; ppUnk : IUnknown** -> "intptr" ; cPages : DWORD -> "int" ; pPageClsID : GUID* -> "var" ; lcid : DWORD -> "int" ; dwReserved : DWORD -> "int" ; pvReserved : void* -> "intptr" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; HRESULT OleCreatePropertyFrame(HWND hwndOwner, DWORD x, DWORD y, LPCWSTR lpszCaption, DWORD cObjects, IUnknown** ppUnk, DWORD cPages, GUID* pPageClsID, DWORD lcid, DWORD dwReserved, void* pvReserved) #uselib "OLEAUT32.dll" #cfunc global OleCreatePropertyFrame "OleCreatePropertyFrame" intptr, int, int, wstr, int, intptr, int, intptr, int, int, intptr ; res = OleCreatePropertyFrame(hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, varptr(pPageClsID), lcid, dwReserved, pvReserved) ; hwndOwner : HWND -> "intptr" ; x : DWORD -> "int" ; y : DWORD -> "int" ; lpszCaption : LPCWSTR -> "wstr" ; cObjects : DWORD -> "int" ; ppUnk : IUnknown** -> "intptr" ; cPages : DWORD -> "int" ; pPageClsID : GUID* -> "intptr" ; lcid : DWORD -> "int" ; dwReserved : DWORD -> "int" ; pvReserved : void* -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
oleaut32 = windows.NewLazySystemDLL("OLEAUT32.dll")
procOleCreatePropertyFrame = oleaut32.NewProc("OleCreatePropertyFrame")
)
// hwndOwner (HWND), x (DWORD), y (DWORD), lpszCaption (LPCWSTR), cObjects (DWORD), ppUnk (IUnknown**), cPages (DWORD), pPageClsID (GUID*), lcid (DWORD), dwReserved (DWORD), pvReserved (void*)
r1, _, err := procOleCreatePropertyFrame.Call(
uintptr(hwndOwner),
uintptr(x),
uintptr(y),
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(lpszCaption))),
uintptr(cObjects),
uintptr(ppUnk),
uintptr(cPages),
uintptr(pPageClsID),
uintptr(lcid),
uintptr(dwReserved),
uintptr(pvReserved),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // HRESULTfunction OleCreatePropertyFrame(
hwndOwner: THandle; // HWND
x: DWORD; // DWORD
y: DWORD; // DWORD
lpszCaption: PWideChar; // LPCWSTR
cObjects: DWORD; // DWORD
ppUnk: Pointer; // IUnknown**
cPages: DWORD; // DWORD
pPageClsID: PGUID; // GUID*
lcid: DWORD; // DWORD
dwReserved: DWORD; // DWORD
pvReserved: Pointer // void*
): Integer; stdcall;
external 'OLEAUT32.dll' name 'OleCreatePropertyFrame';result := DllCall("OLEAUT32\OleCreatePropertyFrame"
, "Ptr", hwndOwner ; HWND
, "UInt", x ; DWORD
, "UInt", y ; DWORD
, "WStr", lpszCaption ; LPCWSTR
, "UInt", cObjects ; DWORD
, "Ptr", ppUnk ; IUnknown**
, "UInt", cPages ; DWORD
, "Ptr", pPageClsID ; GUID*
, "UInt", lcid ; DWORD
, "UInt", dwReserved ; DWORD
, "Ptr", pvReserved ; void*
, "Int") ; return: HRESULT●OleCreatePropertyFrame(hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, pPageClsID, lcid, dwReserved, pvReserved) = DLL("OLEAUT32.dll", "int OleCreatePropertyFrame(void*, dword, dword, char*, dword, void*, dword, void*, dword, dword, void*)")
# 呼び出し: OleCreatePropertyFrame(hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, pPageClsID, lcid, dwReserved, pvReserved)
# hwndOwner : HWND -> "void*"
# x : DWORD -> "dword"
# y : DWORD -> "dword"
# lpszCaption : LPCWSTR -> "char*"
# cObjects : DWORD -> "dword"
# ppUnk : IUnknown** -> "void*"
# cPages : DWORD -> "dword"
# pPageClsID : GUID* -> "void*"
# lcid : DWORD -> "dword"
# dwReserved : DWORD -> "dword"
# pvReserved : void* -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。const std = @import("std");
extern "oleaut32" fn OleCreatePropertyFrame(
hwndOwner: ?*anyopaque, // HWND
x: u32, // DWORD
y: u32, // DWORD
lpszCaption: [*c]const u16, // LPCWSTR
cObjects: u32, // DWORD
ppUnk: ?*anyopaque, // IUnknown**
cPages: u32, // DWORD
pPageClsID: [*c]GUID, // GUID*
lcid: u32, // DWORD
dwReserved: u32, // DWORD
pvReserved: ?*anyopaque // void*
) callconv(std.os.windows.WINAPI) i32;proc OleCreatePropertyFrame(
hwndOwner: pointer, # HWND
x: uint32, # DWORD
y: uint32, # DWORD
lpszCaption: WideCString, # LPCWSTR
cObjects: uint32, # DWORD
ppUnk: pointer, # IUnknown**
cPages: uint32, # DWORD
pPageClsID: ptr GUID, # GUID*
lcid: uint32, # DWORD
dwReserved: uint32, # DWORD
pvReserved: pointer # void*
): int32 {.importc: "OleCreatePropertyFrame", stdcall, dynlib: "OLEAUT32.dll".}pragma(lib, "oleaut32");
extern(Windows)
int OleCreatePropertyFrame(
void* hwndOwner, // HWND
uint x, // DWORD
uint y, // DWORD
const(wchar)* lpszCaption, // LPCWSTR
uint cObjects, // DWORD
void* ppUnk, // IUnknown**
uint cPages, // DWORD
GUID* pPageClsID, // GUID*
uint lcid, // DWORD
uint dwReserved, // DWORD
void* pvReserved // void*
);ccall((:OleCreatePropertyFrame, "OLEAUT32.dll"), stdcall, Int32,
(Ptr{Cvoid}, UInt32, UInt32, Cwstring, UInt32, Ptr{Cvoid}, UInt32, Ptr{GUID}, UInt32, UInt32, Ptr{Cvoid}),
hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, pPageClsID, lcid, dwReserved, pvReserved)
# hwndOwner : HWND -> Ptr{Cvoid}
# x : DWORD -> UInt32
# y : DWORD -> UInt32
# lpszCaption : LPCWSTR -> Cwstring
# cObjects : DWORD -> UInt32
# ppUnk : IUnknown** -> Ptr{Cvoid}
# cPages : DWORD -> UInt32
# pPageClsID : GUID* -> Ptr{GUID}
# lcid : DWORD -> UInt32
# dwReserved : DWORD -> UInt32
# pvReserved : void* -> Ptr{Cvoid}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。local ffi = require("ffi")
ffi.cdef[[
int32_t OleCreatePropertyFrame(
void* hwndOwner,
uint32_t x,
uint32_t y,
const uint16_t* lpszCaption,
uint32_t cObjects,
void* ppUnk,
uint32_t cPages,
void* pPageClsID,
uint32_t lcid,
uint32_t dwReserved,
void* pvReserved);
]]
local oleaut32 = ffi.load("oleaut32")
-- oleaut32.OleCreatePropertyFrame(hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, pPageClsID, lcid, dwReserved, pvReserved)
-- hwndOwner : HWND
-- x : DWORD
-- y : DWORD
-- lpszCaption : LPCWSTR
-- cObjects : DWORD
-- ppUnk : IUnknown**
-- cPages : DWORD
-- pPageClsID : GUID*
-- lcid : DWORD
-- dwReserved : DWORD
-- pvReserved : void*
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。const koffi = require('koffi');
const lib = koffi.load('OLEAUT32.dll');
const OleCreatePropertyFrame = lib.func('__stdcall', 'OleCreatePropertyFrame', 'int32_t', ['void *', 'uint32_t', 'uint32_t', 'str16', 'uint32_t', 'void *', 'uint32_t', 'void *', 'uint32_t', 'uint32_t', 'void *']);
// OleCreatePropertyFrame(hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, pPageClsID, lcid, dwReserved, pvReserved)
// hwndOwner : HWND -> 'void *'
// x : DWORD -> 'uint32_t'
// y : DWORD -> 'uint32_t'
// lpszCaption : LPCWSTR -> 'str16'
// cObjects : DWORD -> 'uint32_t'
// ppUnk : IUnknown** -> 'void *'
// cPages : DWORD -> 'uint32_t'
// pPageClsID : GUID* -> 'void *'
// lcid : DWORD -> 'uint32_t'
// dwReserved : DWORD -> 'uint32_t'
// pvReserved : void* -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("OLEAUT32.dll", {
OleCreatePropertyFrame: { parameters: ["pointer", "u32", "u32", "buffer", "u32", "pointer", "u32", "pointer", "u32", "u32", "pointer"], result: "i32" },
});
// lib.symbols.OleCreatePropertyFrame(hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, pPageClsID, lcid, dwReserved, pvReserved)
// hwndOwner : HWND -> "pointer"
// x : DWORD -> "u32"
// y : DWORD -> "u32"
// lpszCaption : LPCWSTR -> "buffer"
// cObjects : DWORD -> "u32"
// ppUnk : IUnknown** -> "pointer"
// cPages : DWORD -> "u32"
// pPageClsID : GUID* -> "pointer"
// lcid : DWORD -> "u32"
// dwReserved : DWORD -> "u32"
// pvReserved : void* -> "pointer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
int32_t OleCreatePropertyFrame(
void* hwndOwner,
uint32_t x,
uint32_t y,
const uint16_t* lpszCaption,
uint32_t cObjects,
void* ppUnk,
uint32_t cPages,
void* pPageClsID,
uint32_t lcid,
uint32_t dwReserved,
void* pvReserved);
C, "OLEAUT32.dll");
// $ffi->OleCreatePropertyFrame(hwndOwner, x, y, lpszCaption, cObjects, ppUnk, cPages, pPageClsID, lcid, dwReserved, pvReserved);
// hwndOwner : HWND
// x : DWORD
// y : DWORD
// lpszCaption : LPCWSTR
// cObjects : DWORD
// ppUnk : IUnknown**
// cPages : DWORD
// pPageClsID : GUID*
// lcid : DWORD
// dwReserved : DWORD
// pvReserved : void*
// 構造体/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 Oleaut32 extends StdCallLibrary {
Oleaut32 INSTANCE = Native.load("oleaut32", Oleaut32.class);
int OleCreatePropertyFrame(
Pointer hwndOwner, // HWND
int x, // DWORD
int y, // DWORD
WString lpszCaption, // LPCWSTR
int cObjects, // DWORD
Pointer ppUnk, // IUnknown**
int cPages, // DWORD
Pointer pPageClsID, // GUID*
int lcid, // DWORD
int dwReserved, // DWORD
Pointer pvReserved // void*
);
}@[Link("oleaut32")]
lib LibOLEAUT32
fun OleCreatePropertyFrame = OleCreatePropertyFrame(
hwndOwner : Void*, # HWND
x : UInt32, # DWORD
y : UInt32, # DWORD
lpszCaption : UInt16*, # LPCWSTR
cObjects : UInt32, # DWORD
ppUnk : Void*, # IUnknown**
cPages : UInt32, # DWORD
pPageClsID : GUID*, # GUID*
lcid : UInt32, # DWORD
dwReserved : UInt32, # DWORD
pvReserved : Void* # void*
) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef OleCreatePropertyFrameNative = Int32 Function(Pointer<Void>, Uint32, Uint32, Pointer<Utf16>, Uint32, Pointer<Void>, Uint32, Pointer<Void>, Uint32, Uint32, Pointer<Void>);
typedef OleCreatePropertyFrameDart = int Function(Pointer<Void>, int, int, Pointer<Utf16>, int, Pointer<Void>, int, Pointer<Void>, int, int, Pointer<Void>);
final OleCreatePropertyFrame = DynamicLibrary.open('OLEAUT32.dll')
.lookupFunction<OleCreatePropertyFrameNative, OleCreatePropertyFrameDart>('OleCreatePropertyFrame');
// hwndOwner : HWND -> Pointer<Void>
// x : DWORD -> Uint32
// y : DWORD -> Uint32
// lpszCaption : LPCWSTR -> Pointer<Utf16>
// cObjects : DWORD -> Uint32
// ppUnk : IUnknown** -> Pointer<Void>
// cPages : DWORD -> Uint32
// pPageClsID : GUID* -> Pointer<Void>
// lcid : DWORD -> Uint32
// dwReserved : DWORD -> Uint32
// pvReserved : void* -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function OleCreatePropertyFrame(
hwndOwner: THandle; // HWND
x: DWORD; // DWORD
y: DWORD; // DWORD
lpszCaption: PWideChar; // LPCWSTR
cObjects: DWORD; // DWORD
ppUnk: Pointer; // IUnknown**
cPages: DWORD; // DWORD
pPageClsID: PGUID; // GUID*
lcid: DWORD; // DWORD
dwReserved: DWORD; // DWORD
pvReserved: Pointer // void*
): Integer; stdcall;
external 'OLEAUT32.dll' name 'OleCreatePropertyFrame';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "OleCreatePropertyFrame"
c_OleCreatePropertyFrame :: Ptr () -> Word32 -> Word32 -> CWString -> Word32 -> Ptr () -> Word32 -> Ptr () -> Word32 -> Word32 -> Ptr () -> IO Int32
-- hwndOwner : HWND -> Ptr ()
-- x : DWORD -> Word32
-- y : DWORD -> Word32
-- lpszCaption : LPCWSTR -> CWString
-- cObjects : DWORD -> Word32
-- ppUnk : IUnknown** -> Ptr ()
-- cPages : DWORD -> Word32
-- pPageClsID : GUID* -> Ptr ()
-- lcid : DWORD -> Word32
-- dwReserved : DWORD -> Word32
-- pvReserved : void* -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。open Ctypes
open Foreign
let olecreatepropertyframe =
foreign "OleCreatePropertyFrame"
((ptr void) @-> uint32_t @-> uint32_t @-> (ptr uint16_t) @-> uint32_t @-> (ptr void) @-> uint32_t @-> (ptr void) @-> uint32_t @-> uint32_t @-> (ptr void) @-> returning int32_t)
(* hwndOwner : HWND -> (ptr void) *)
(* x : DWORD -> uint32_t *)
(* y : DWORD -> uint32_t *)
(* lpszCaption : LPCWSTR -> (ptr uint16_t) *)
(* cObjects : DWORD -> uint32_t *)
(* ppUnk : IUnknown** -> (ptr void) *)
(* cPages : DWORD -> uint32_t *)
(* pPageClsID : GUID* -> (ptr void) *)
(* lcid : DWORD -> uint32_t *)
(* dwReserved : DWORD -> uint32_t *)
(* pvReserved : void* -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)(cffi:define-foreign-library oleaut32 (t "OLEAUT32.dll"))
(cffi:use-foreign-library oleaut32)
(cffi:defcfun ("OleCreatePropertyFrame" ole-create-property-frame :convention :stdcall) :int32
(hwnd-owner :pointer) ; HWND
(x :uint32) ; DWORD
(y :uint32) ; DWORD
(lpsz-caption (:string :encoding :utf-16le)) ; LPCWSTR
(c-objects :uint32) ; DWORD
(pp-unk :pointer) ; IUnknown**
(c-pages :uint32) ; DWORD
(p-page-cls-id :pointer) ; GUID*
(lcid :uint32) ; DWORD
(dw-reserved :uint32) ; DWORD
(pv-reserved :pointer)) ; void*
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。use Win32::API;
my $OleCreatePropertyFrame = Win32::API::More->new('OLEAUT32',
'int OleCreatePropertyFrame(HANDLE hwndOwner, DWORD x, DWORD y, LPCWSTR lpszCaption, DWORD cObjects, LPVOID ppUnk, DWORD cPages, LPVOID pPageClsID, DWORD lcid, DWORD dwReserved, LPVOID pvReserved)');
# my $ret = $OleCreatePropertyFrame->Call($hwndOwner, $x, $y, $lpszCaption, $cObjects, $ppUnk, $cPages, $pPageClsID, $lcid, $dwReserved, $pvReserved);
# hwndOwner : HWND -> HANDLE
# x : DWORD -> DWORD
# y : DWORD -> DWORD
# lpszCaption : LPCWSTR -> LPCWSTR
# cObjects : DWORD -> DWORD
# ppUnk : IUnknown** -> LPVOID
# cPages : DWORD -> DWORD
# pPageClsID : GUID* -> LPVOID
# lcid : DWORD -> DWORD
# dwReserved : DWORD -> DWORD
# pvReserved : void* -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。関連項目
使用する型