名著『大村あつしのExcel VBA Win64/32 API プログラミング』に誤植???
誤植?
おなじみ、『大村あつしのExcel VBA Win64/32 API プログラミング』に、誤植かも知れない箇所を発見したので、ご報告。
すでに出版元のWebページ等で訂正されているかも知れないが、そこは調べていない。(←調べろ。)
134~135ページ
当該書籍(以下「本書」という。)の134~135ページにSHGetPathFromIDList
関数を宣言するコードが掲載されている。
'SHBrowseForFolderで取得した値からフォルダのフルパスを取得する関数' '戻り値 成功 = NOERROR(0)' ' 失敗 = E_INVAILEDARG(=&H80070057)' Declare PtrSafe Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" _ (ByVal pidl As Long, _ ByVal PtrSafe As String) As LongPtr '……(*)'
(「……(*)」は引用者による。)
(*)の
ByVal PtrSafe As String
は間違いだと思う。
PtrSafe
のところに入る引数(変数)には、この関数を実行したときに固定長の文字列(取得したフォルダパス)が格納される模様なので、上掲コードの「PtrSafe
」の部分を、それらしい識別子で置き換えなければならない。
とりあえず、私は、本書133ページに掲載されている構造体(SHBrowseForFolder
関数に渡す引数)「BROWSEINFO
」の要素名から取って「pszDispName
」としている。
修正後のコード
修正後のコードを載っけておく。ただし、ご利用は自己責任で。
リスト1 標準モジュール
'For 64bit' Declare PtrSafe Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" _ (ByVal pidl As Long, _ ByVal pszDispName As String) As LongPtr 'For 32bit' Declare Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" _ (ByVal pidl As Long, _ ByVal pszDispName As String) As Long
上が64bit用、下が32bit用です。
おわりに
所詮、素人なので、間違えていたら教えろ教えてください。
出版元や筆者からお礼に記念品、とか言われたら、遠慮なくいただきますw