Win32 API 日本語リファレンス
ホームStorage.FileSystem › VerInstallFileA

VerInstallFileA

関数
バージョンを確認しながらファイルをインストールする(ANSI版)。
DLLVERSION.dll文字セットANSI (-A)呼出規約winapi対応OSWindows 2000 以降

シグネチャ

// VERSION.dll  (ANSI / -A)
#include <windows.h>

VER_INSTALL_FILE_STATUS VerInstallFileA(
    VER_INSTALL_FILE_FLAGS uFlags,
    LPCSTR szSrcFileName,
    LPCSTR szDestFileName,
    LPCSTR szSrcDir,
    LPCSTR szDestDir,
    LPCSTR szCurDir,
    LPSTR szTmpFile,
    DWORD* puTmpFileLen
);

パラメーター

名前方向
uFlagsVER_INSTALL_FILE_FLAGSin
szSrcFileNameLPCSTRin
szDestFileNameLPCSTRin
szSrcDirLPCSTRin
szDestDirLPCSTRin
szCurDirLPCSTRin
szTmpFileLPSTRout
puTmpFileLenDWORD*inout

戻り値の型: VER_INSTALL_FILE_STATUS

各言語での呼び出し定義

// VERSION.dll  (ANSI / -A)
#include <windows.h>

VER_INSTALL_FILE_STATUS VerInstallFileA(
    VER_INSTALL_FILE_FLAGS uFlags,
    LPCSTR szSrcFileName,
    LPCSTR szDestFileName,
    LPCSTR szSrcDir,
    LPCSTR szDestDir,
    LPCSTR szCurDir,
    LPSTR szTmpFile,
    DWORD* puTmpFileLen
);
[DllImport("VERSION.dll", CharSet = CharSet.Ansi, ExactSpelling = true)]
static extern uint VerInstallFileA(
    uint uFlags,   // VER_INSTALL_FILE_FLAGS
    [MarshalAs(UnmanagedType.LPStr)] string szSrcFileName,   // LPCSTR
    [MarshalAs(UnmanagedType.LPStr)] string szDestFileName,   // LPCSTR
    [MarshalAs(UnmanagedType.LPStr)] string szSrcDir,   // LPCSTR
    [MarshalAs(UnmanagedType.LPStr)] string szDestDir,   // LPCSTR
    [MarshalAs(UnmanagedType.LPStr)] string szCurDir,   // LPCSTR
    [MarshalAs(UnmanagedType.LPStr)] System.Text.StringBuilder szTmpFile,   // LPSTR out
    ref uint puTmpFileLen   // DWORD* in/out
);
<DllImport("VERSION.dll", CharSet:=CharSet.Ansi, ExactSpelling:=True)>
Public Shared Function VerInstallFileA(
    uFlags As UInteger,   ' VER_INSTALL_FILE_FLAGS
    <MarshalAs(UnmanagedType.LPStr)> szSrcFileName As String,   ' LPCSTR
    <MarshalAs(UnmanagedType.LPStr)> szDestFileName As String,   ' LPCSTR
    <MarshalAs(UnmanagedType.LPStr)> szSrcDir As String,   ' LPCSTR
    <MarshalAs(UnmanagedType.LPStr)> szDestDir As String,   ' LPCSTR
    <MarshalAs(UnmanagedType.LPStr)> szCurDir As String,   ' LPCSTR
    <MarshalAs(UnmanagedType.LPStr)> szTmpFile As System.Text.StringBuilder,   ' LPSTR out
    ByRef puTmpFileLen As UInteger   ' DWORD* in/out
) As UInteger
End Function
' uFlags : VER_INSTALL_FILE_FLAGS
' szSrcFileName : LPCSTR
' szDestFileName : LPCSTR
' szSrcDir : LPCSTR
' szDestDir : LPCSTR
' szCurDir : LPCSTR
' szTmpFile : LPSTR out
' puTmpFileLen : DWORD* in/out
Declare PtrSafe Function VerInstallFileA Lib "version" ( _
    ByVal uFlags As Long, _
    ByVal szSrcFileName As String, _
    ByVal szDestFileName As String, _
    ByVal szSrcDir As String, _
    ByVal szDestDir As String, _
    ByVal szCurDir As String, _
    ByVal szTmpFile As String, _
    ByRef puTmpFileLen As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

VerInstallFileA = ctypes.windll.version.VerInstallFileA
VerInstallFileA.restype = wintypes.DWORD
VerInstallFileA.argtypes = [
    wintypes.DWORD,  # uFlags : VER_INSTALL_FILE_FLAGS
    wintypes.LPCSTR,  # szSrcFileName : LPCSTR
    wintypes.LPCSTR,  # szDestFileName : LPCSTR
    wintypes.LPCSTR,  # szSrcDir : LPCSTR
    wintypes.LPCSTR,  # szDestDir : LPCSTR
    wintypes.LPCSTR,  # szCurDir : LPCSTR
    wintypes.LPSTR,  # szTmpFile : LPSTR out
    ctypes.POINTER(wintypes.DWORD),  # puTmpFileLen : DWORD* in/out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('VERSION.dll')
VerInstallFileA = Fiddle::Function.new(
  lib['VerInstallFileA'],
  [
    -Fiddle::TYPE_INT,  # uFlags : VER_INSTALL_FILE_FLAGS
    Fiddle::TYPE_VOIDP,  # szSrcFileName : LPCSTR
    Fiddle::TYPE_VOIDP,  # szDestFileName : LPCSTR
    Fiddle::TYPE_VOIDP,  # szSrcDir : LPCSTR
    Fiddle::TYPE_VOIDP,  # szDestDir : LPCSTR
    Fiddle::TYPE_VOIDP,  # szCurDir : LPCSTR
    Fiddle::TYPE_VOIDP,  # szTmpFile : LPSTR out
    Fiddle::TYPE_VOIDP,  # puTmpFileLen : DWORD* in/out
  ],
  -Fiddle::TYPE_INT)
#[link(name = "version")]
extern "system" {
    fn VerInstallFileA(
        uFlags: u32,  // VER_INSTALL_FILE_FLAGS
        szSrcFileName: *const u8,  // LPCSTR
        szDestFileName: *const u8,  // LPCSTR
        szSrcDir: *const u8,  // LPCSTR
        szDestDir: *const u8,  // LPCSTR
        szCurDir: *const u8,  // LPCSTR
        szTmpFile: *mut u8,  // LPSTR out
        puTmpFileLen: *mut u32  // DWORD* in/out
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("VERSION.dll", CharSet = CharSet.Ansi)]
public static extern uint VerInstallFileA(uint uFlags, [MarshalAs(UnmanagedType.LPStr)] string szSrcFileName, [MarshalAs(UnmanagedType.LPStr)] string szDestFileName, [MarshalAs(UnmanagedType.LPStr)] string szSrcDir, [MarshalAs(UnmanagedType.LPStr)] string szDestDir, [MarshalAs(UnmanagedType.LPStr)] string szCurDir, [MarshalAs(UnmanagedType.LPStr)] System.Text.StringBuilder szTmpFile, ref uint puTmpFileLen);
"@
$api = Add-Type -MemberDefinition $sig -Name 'VERSION_VerInstallFileA' -Namespace Win32 -PassThru
# $api::VerInstallFileA(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen)
#uselib "VERSION.dll"
#func global VerInstallFileA "VerInstallFileA" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; VerInstallFileA uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, varptr(szTmpFile), varptr(puTmpFileLen)   ; 戻り値は stat
; uFlags : VER_INSTALL_FILE_FLAGS -> "sptr"
; szSrcFileName : LPCSTR -> "sptr"
; szDestFileName : LPCSTR -> "sptr"
; szSrcDir : LPCSTR -> "sptr"
; szDestDir : LPCSTR -> "sptr"
; szCurDir : LPCSTR -> "sptr"
; szTmpFile : LPSTR out -> "sptr"
; puTmpFileLen : DWORD* in/out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "VERSION.dll"
#cfunc global VerInstallFileA "VerInstallFileA" int, str, str, str, str, str, var, var
; res = VerInstallFileA(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen)
; uFlags : VER_INSTALL_FILE_FLAGS -> "int"
; szSrcFileName : LPCSTR -> "str"
; szDestFileName : LPCSTR -> "str"
; szSrcDir : LPCSTR -> "str"
; szDestDir : LPCSTR -> "str"
; szCurDir : LPCSTR -> "str"
; szTmpFile : LPSTR out -> "var"
; puTmpFileLen : DWORD* in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; VER_INSTALL_FILE_STATUS VerInstallFileA(VER_INSTALL_FILE_FLAGS uFlags, LPCSTR szSrcFileName, LPCSTR szDestFileName, LPCSTR szSrcDir, LPCSTR szDestDir, LPCSTR szCurDir, LPSTR szTmpFile, DWORD* puTmpFileLen)
#uselib "VERSION.dll"
#cfunc global VerInstallFileA "VerInstallFileA" int, str, str, str, str, str, var, var
; res = VerInstallFileA(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen)
; uFlags : VER_INSTALL_FILE_FLAGS -> "int"
; szSrcFileName : LPCSTR -> "str"
; szDestFileName : LPCSTR -> "str"
; szSrcDir : LPCSTR -> "str"
; szDestDir : LPCSTR -> "str"
; szCurDir : LPCSTR -> "str"
; szTmpFile : LPSTR out -> "var"
; puTmpFileLen : DWORD* in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	version = windows.NewLazySystemDLL("VERSION.dll")
	procVerInstallFileA = version.NewProc("VerInstallFileA")
)

// uFlags (VER_INSTALL_FILE_FLAGS), szSrcFileName (LPCSTR), szDestFileName (LPCSTR), szSrcDir (LPCSTR), szDestDir (LPCSTR), szCurDir (LPCSTR), szTmpFile (LPSTR out), puTmpFileLen (DWORD* in/out)
r1, _, err := procVerInstallFileA.Call(
	uintptr(uFlags),
	uintptr(unsafe.Pointer(windows.BytePtrFromString(szSrcFileName))),
	uintptr(unsafe.Pointer(windows.BytePtrFromString(szDestFileName))),
	uintptr(unsafe.Pointer(windows.BytePtrFromString(szSrcDir))),
	uintptr(unsafe.Pointer(windows.BytePtrFromString(szDestDir))),
	uintptr(unsafe.Pointer(windows.BytePtrFromString(szCurDir))),
	uintptr(szTmpFile),
	uintptr(puTmpFileLen),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // VER_INSTALL_FILE_STATUS
function VerInstallFileA(
  uFlags: DWORD;   // VER_INSTALL_FILE_FLAGS
  szSrcFileName: PAnsiChar;   // LPCSTR
  szDestFileName: PAnsiChar;   // LPCSTR
  szSrcDir: PAnsiChar;   // LPCSTR
  szDestDir: PAnsiChar;   // LPCSTR
  szCurDir: PAnsiChar;   // LPCSTR
  szTmpFile: PAnsiChar;   // LPSTR out
  puTmpFileLen: Pointer   // DWORD* in/out
): DWORD; stdcall;
  external 'VERSION.dll' name 'VerInstallFileA';
result := DllCall("VERSION\VerInstallFileA"
    , "UInt", uFlags   ; VER_INSTALL_FILE_FLAGS
    , "AStr", szSrcFileName   ; LPCSTR
    , "AStr", szDestFileName   ; LPCSTR
    , "AStr", szSrcDir   ; LPCSTR
    , "AStr", szDestDir   ; LPCSTR
    , "AStr", szCurDir   ; LPCSTR
    , "Ptr", szTmpFile   ; LPSTR out
    , "Ptr", puTmpFileLen   ; DWORD* in/out
    , "UInt")   ; return: VER_INSTALL_FILE_STATUS
●VerInstallFileA(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen) = DLL("VERSION.dll", "dword VerInstallFileA(dword, char*, char*, char*, char*, char*, char*, void*)")
# 呼び出し: VerInstallFileA(uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen)
# uFlags : VER_INSTALL_FILE_FLAGS -> "dword"
# szSrcFileName : LPCSTR -> "char*"
# szDestFileName : LPCSTR -> "char*"
# szSrcDir : LPCSTR -> "char*"
# szDestDir : LPCSTR -> "char*"
# szCurDir : LPCSTR -> "char*"
# szTmpFile : LPSTR out -> "char*"
# puTmpFileLen : DWORD* in/out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。