【发布时间】:2013-07-10 12:17:53
【问题描述】:
我在 VB.NET 中调用 Shell.BrowseForFolder,因为我需要在 rootFolder 参数中传递任意路径。所以我实例化了一个这样的对象:
Dim shellType As Type = Type.GetTypeFromProgID("Shell.Application")
Dim shell = Activator.CreateInstance(shellType)
然后我打电话:
Dim folder = shell.BrowseForFolder(0, message, &H241, rootFolder)
它没有按预期工作(根文件夹F:未使用)
但如果我使用具有相同参数的反射:
Dim folder = shellType.InvokeMember("BrowseForFolder", _
BindingFlags.InvokeMethod, Nothing, shell, New Object() {0, message, &H241, _
rootFolder})
有效!
但对我来说,这 2 个调用(InvokeMember 和直接调用)应该会产生相似的结果(参数相同)。发生了什么事?
编辑:
事实上,如果我调用 ToString() 或者我放一个 litteral,它就可以工作:
Dim folder = shell.BrowseForFolder(0, message, &H241, rootFolder.ToString())
或
Dim folder = shell.BrowseForFolder(0, message, &H241, "F:")
但是如果 rootFolder 是一个参数,它就不起作用,例如:
Function BrowseForFolder(ByVal message As String, ByVal rootFolder As String) As String
Dim shellType As Type = Type.GetTypeFromProgID("Shell.Application")
Dim shell = Activator.CreateInstance(shellType)
Dim folder = shell.BrowseForFolder(0, message, &H241, rootFolder)
If folder Is Nothing Then
Return ""
End If
Return folder.Self.Path
End Function
【问题讨论】:
标签: .net vb.net reflection