カタバミさんのプログラミングノート

日曜プログラマーがプログラミング関係のメモを記録するブログです。

VBAのPtrSafe/LongPtr

VBAにも64ビット対応の波が押し寄せていたらしく、DeclareステートメントにPtrSafe属性、データ型にLongPtr型が追加されていました。PtrSafeの無いDeclareステートメントの呼び出しは64ビット環境ではエラーとなり、LongPtr型はC/C++のポインタ(void*等)同様、32ビット環境では32ビット(Long型相当)、64ビット環境では64ビット(LongLong型相当)となるそうです。

WinAPIではポインタは32/64ビットでビット数が変わり整数型は変化しないこと(int/long/Long型は常に32ビット、longlong/LongLong型は常に64ビット)から、DeclareステートメントでPtrSafe属性を指定してポインタをLong型からLongPtr型で置き換えることでビット数に依存しないコードを記述することが可能となっています。