Antoine.st Alias for Win Api

About Alias

エイリアスってのは別名のことで、わかりづらい API の名前をより簡単に理解できるように名づけたり、または伝統的な名前に合わせるためなどに使われます。すぐ思い出せるのが、RtlMoveMemory() のエイリアスとして CopyMemory() と名づけたりというやつです。ま、これはマクロ名だったりするわけですが。

エイリアスのつけ方は簡単で、


  Declare Ansi Function HogeHoge _
    Lib "Kernel32.dll" _
    Alias "GetFileAttributesA" _
  ( _
      ByVal lpFileName As String _
  ) As Integer

という感じです。実際に呼び出される DLL 関数は GetFileAttributesA() ですが Visual Basic .NET のコード上では HogeHoge() として呼び出せる、というわけ。DllImport を使った場合でも、


  <DllImport( _
    "Kernel32.dll", _
    EntryPoint:="GetFileAttributesA"
    CallingConvention:=CallingConvention.Winapi, _
    CharSet:=CharSet.Ansi, _
    ExactSpelling:=False, _
    SetLastError:=True _
  )> Public Shared Function HogeHoge( _
    ByVal lpFileName As String) As Integer
  End Function

こんな感じで同様の効果が得られます。

Suffix

上のコードでもありますが、ExactSpelling フィールドに False を設定しておくことにより、CharSet フィールドで指定した文字列型 (Ansi, Unicode) の接尾語 (A, W) が自動的に追加されます。

と説明がなかなかわかりづらいのですが、ようするに次のようなことです。

旧 Visual Basic では、 GetFileAttributes() を呼び出したいときに実体である GetFileAttributesA()、もしくは GetFileAttributesW() のどちらかを明示的に指定する必要がありました。.NET Framework では ExactSpelling フィールドに True を設定しておけば、その指定を行う必要はありません。