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

VerFindFileA

関数
インストール先となるファイルの配置場所を判定する(ANSI版)。
DLLVERSION.dll文字セットANSI (-A)呼出規約winapi対応OSWindows 2000 以降

シグネチャ

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

VER_FIND_FILE_STATUS VerFindFileA(
    VER_FIND_FILE_FLAGS uFlags,
    LPCSTR szFileName,
    LPCSTR szWinDir,   // optional
    LPCSTR szAppDir,
    LPSTR szCurDir,
    DWORD* puCurDirLen,
    LPSTR szDestDir,
    DWORD* puDestDirLen
);

パラメーター

名前方向
uFlagsVER_FIND_FILE_FLAGSin
szFileNameLPCSTRin
szWinDirLPCSTRinoptional
szAppDirLPCSTRin
szCurDirLPSTRout
puCurDirLenDWORD*inout
szDestDirLPSTRout
puDestDirLenDWORD*inout

戻り値の型: VER_FIND_FILE_STATUS

各言語での呼び出し定義

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

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

VerFindFileA = ctypes.windll.version.VerFindFileA
VerFindFileA.restype = wintypes.DWORD
VerFindFileA.argtypes = [
    wintypes.DWORD,  # uFlags : VER_FIND_FILE_FLAGS
    wintypes.LPCSTR,  # szFileName : LPCSTR
    wintypes.LPCSTR,  # szWinDir : LPCSTR optional
    wintypes.LPCSTR,  # szAppDir : LPCSTR
    wintypes.LPSTR,  # szCurDir : LPSTR out
    ctypes.POINTER(wintypes.DWORD),  # puCurDirLen : DWORD* in/out
    wintypes.LPSTR,  # szDestDir : LPSTR out
    ctypes.POINTER(wintypes.DWORD),  # puDestDirLen : DWORD* in/out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('VERSION.dll')
VerFindFileA = Fiddle::Function.new(
  lib['VerFindFileA'],
  [
    -Fiddle::TYPE_INT,  # uFlags : VER_FIND_FILE_FLAGS
    Fiddle::TYPE_VOIDP,  # szFileName : LPCSTR
    Fiddle::TYPE_VOIDP,  # szWinDir : LPCSTR optional
    Fiddle::TYPE_VOIDP,  # szAppDir : LPCSTR
    Fiddle::TYPE_VOIDP,  # szCurDir : LPSTR out
    Fiddle::TYPE_VOIDP,  # puCurDirLen : DWORD* in/out
    Fiddle::TYPE_VOIDP,  # szDestDir : LPSTR out
    Fiddle::TYPE_VOIDP,  # puDestDirLen : DWORD* in/out
  ],
  -Fiddle::TYPE_INT)
#[link(name = "version")]
extern "system" {
    fn VerFindFileA(
        uFlags: u32,  // VER_FIND_FILE_FLAGS
        szFileName: *const u8,  // LPCSTR
        szWinDir: *const u8,  // LPCSTR optional
        szAppDir: *const u8,  // LPCSTR
        szCurDir: *mut u8,  // LPSTR out
        puCurDirLen: *mut u32,  // DWORD* in/out
        szDestDir: *mut u8,  // LPSTR out
        puDestDirLen: *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 VerFindFileA(uint uFlags, [MarshalAs(UnmanagedType.LPStr)] string szFileName, [MarshalAs(UnmanagedType.LPStr)] string szWinDir, [MarshalAs(UnmanagedType.LPStr)] string szAppDir, [MarshalAs(UnmanagedType.LPStr)] System.Text.StringBuilder szCurDir, ref uint puCurDirLen, [MarshalAs(UnmanagedType.LPStr)] System.Text.StringBuilder szDestDir, ref uint puDestDirLen);
"@
$api = Add-Type -MemberDefinition $sig -Name 'VERSION_VerFindFileA' -Namespace Win32 -PassThru
# $api::VerFindFileA(uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen)
#uselib "VERSION.dll"
#func global VerFindFileA "VerFindFileA" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; VerFindFileA uFlags, szFileName, szWinDir, szAppDir, varptr(szCurDir), varptr(puCurDirLen), varptr(szDestDir), varptr(puDestDirLen)   ; 戻り値は stat
; uFlags : VER_FIND_FILE_FLAGS -> "sptr"
; szFileName : LPCSTR -> "sptr"
; szWinDir : LPCSTR optional -> "sptr"
; szAppDir : LPCSTR -> "sptr"
; szCurDir : LPSTR out -> "sptr"
; puCurDirLen : DWORD* in/out -> "sptr"
; szDestDir : LPSTR out -> "sptr"
; puDestDirLen : DWORD* in/out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "VERSION.dll"
#cfunc global VerFindFileA "VerFindFileA" int, str, str, str, var, var, var, var
; res = VerFindFileA(uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen)
; uFlags : VER_FIND_FILE_FLAGS -> "int"
; szFileName : LPCSTR -> "str"
; szWinDir : LPCSTR optional -> "str"
; szAppDir : LPCSTR -> "str"
; szCurDir : LPSTR out -> "var"
; puCurDirLen : DWORD* in/out -> "var"
; szDestDir : LPSTR out -> "var"
; puDestDirLen : DWORD* in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; VER_FIND_FILE_STATUS VerFindFileA(VER_FIND_FILE_FLAGS uFlags, LPCSTR szFileName, LPCSTR szWinDir, LPCSTR szAppDir, LPSTR szCurDir, DWORD* puCurDirLen, LPSTR szDestDir, DWORD* puDestDirLen)
#uselib "VERSION.dll"
#cfunc global VerFindFileA "VerFindFileA" int, str, str, str, var, var, var, var
; res = VerFindFileA(uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen)
; uFlags : VER_FIND_FILE_FLAGS -> "int"
; szFileName : LPCSTR -> "str"
; szWinDir : LPCSTR optional -> "str"
; szAppDir : LPCSTR -> "str"
; szCurDir : LPSTR out -> "var"
; puCurDirLen : DWORD* in/out -> "var"
; szDestDir : LPSTR out -> "var"
; puDestDirLen : DWORD* in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	version = windows.NewLazySystemDLL("VERSION.dll")
	procVerFindFileA = version.NewProc("VerFindFileA")
)

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