■Win64 APIの書式
------------------------------------------------------------------------------
Declare PtrSafe Function Getwindowsdiretory Lib "kernel32" _
Alias "GetWindowsDirectoryA" _
(ByVal lpBuffer As String, _
ByVal nSize As Long) As LongPtr
-------------------------------------------------------------------------------
解説
①PtrSafe
Win64 APIをコールするときは、まず、PtrSafeキーワードを使用して64ビットVBAに
コンパイルする。
②Function Getwindowsdiretory
関数名を指定する。基本的にC言語で宣言されたAPIの関数名と同じものを使う。
まだ、Win64 APIは関数なので値を返す。そこで、Functionキーワードを使用し、
関数形式で宣言する。
※値を返さないAPI関数の時はSubキーワードを使用する。
③Lib "kernel32"
ライブラリの指定。API関数が格納されているDLLを記述します。これがないとVBAは
API関数の所在が分からない。Windowsライブラリの「Kernel32.dll」「User32.dll」
「Gbi32.dll」の3つに限り拡張子を省略できるが、その他のライブラリにあるAPI関数
を呼び出すときには「Lib "advapi32.dll」のように拡張子を含めて記述する。
④Alias "GetWindowsDirectoryA"
DLLで公開されている正式な関数名の指定。APIはDLLの中では別の名前で公開されて
いるケースがある。その場合、Alias節で公開されている関数名を宣言する。
⑤ lpBuffer As String nSize As Long
C言語では引数「lpBuffer」のデータ型は「LPTSTR」で宣言されているが、VBAには
そのようなデータ型がないためString型に変換して宣言している。同様にデータ型
「UNIT」はlong型に変換されている。
⑥As LongPtr
戻り値のデータ型の指定。GetWindowsDirectoryAは「UNIT」型のデータ型を返すこと
がC言語の宣言書式からわかる。そこで、戻り値の型をVBAの「LongPtr型」に変換
している。