选择文件夹对话框 API 函数(SHBrowseForFolder)的一个小问题
kxgy 2002-07-03 05:33:20 我在程序中声明了 SHBrowseForFolder 函数:
<StructLayout(LayoutKind.Sequential)> _
Public Structure BROWSEINFO
Public hWndOwner As IntPtr
Public pidlRoot As ITEMIDLIST
<MarshalAs(UnmanagedType.LPTStr)> Public pszDisplayName As String
<MarshalAs(UnmanagedType.LPTStr)> Public lpszTitle As String
Public ulFlags As BrowsingForDirectory
Public lpfn As BFFCALLBACK
Public lParam As IntPtr
Public iImage As Integer
End Structure
Public Enum BrowsingForDirectory
BIF_RETURNONLYFSDIRS = &H1
BIF_DONTGOBELOWDOMAIN = &H2
BIF_STATUSTEXT = &H4
BIF_RETURNFSANCESTORS = &H8
BIF_EDITBOX = &H10
BIF_VALIDATE = &H20
BIF_NEWDIALOGSTYLE = &H40
BIF_USENEWUI = BIF_NEWDIALOGSTYLE Or BIF_EDITBOX
BIF_BROWSEINCLUDEURLS = &H80
BIF_UAHINT = &H100
BIF_NONEWFOLDERBUTTON = &H200
BIF_NOTRANSLATETARGETS = &H400
BIF_BROWSEFORCOMPUTER = &H1000
BIF_BROWSEFORPRINTER = &H2000
BIF_BROWSEINCLUDEFILES = &H4000
BIF_SHAREABLE = &H8000
End Enum
<StructLayout(LayoutKind.Sequential)> _
Public Class ITEMIDLIST
Public mkid As SHITEMID
End Class
<StructLayout(LayoutKind.Sequential)> _
Public Structure SHITEMID
Public cb As Short
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public abID() As Byte
End Structure
Public Delegate Function BFFCALLBACK(ByVal hWnd As Integer, ByVal nMsg As Integer, ByVal lParam As IntPtr, ByVal lpData As IntPtr) As Integer
Public Declare Auto Function SHBrowseForFolder (Byref lpbi As BROWSEINFO) As <MarshalAs(UnmanagedType.LPStruct)> ITEMIDLIST
调用正常。
但我将返回值代入函数:
Public Declare Auto Function SHGetPathFromIDList Lib "shell32" (ByVal pidl As ITEMIDLIST, ByVal pszPath As String) As Boolean
时却始终得不到正确的 pszPath 值。
请问哪位大侠能帮帮我,是声明中有错,还是其它什么原因?……