【发布时间】:2014-10-06 11:42:46
【问题描述】:
这可能是一个菜鸟问题,但似乎尽管检查了 15 多个资源,但在 .NET 中使用 COM 接口时我仍然缺少一件事。
我想使用 Windows Shell 解压缩文件。 (我的目标:适用于 Windows XP 及更高版本,没有第 3 方 Zip 库,没有 .DLL 与我的 exe 一起出现,.net4.0。)只需实例化Shell.Application COM 对象并调用它的方法。 (简约的方法。)
我可以使用早期绑定来处理它(source,构建正常):
Dim sc As New Shell32.ShellClass()
Dim SrcFlder As Shell32.Folder = sc.NameSpace(sourceFilename)
Dim DestFlder As Shell32.Folder = sc.NameSpace(destinationDirName)
Dim Items As Shell32.FolderItems = SrcFlder.Items()
DestFlder.CopyHere(Items, 16) '16 = Respond with "Yes to All"
我也可以使用 vba 中的 late 绑定来处理它,我有经验。但是当涉及到COM 模块中的类型 时,我不确定如何在.net 中使用后期绑定。以下转换后的代码的前两行有效,但是如何创建 Shell32.folder 类型的变量?它不是像Shell.Application 那样的公共类型(在Windows 注册表中注册)。
Dim st As Type = Type.GetTypeFromProgID("Shell.Application", True)
Dim sc As Object = Activator.CreateInstance(st, True)
'how to instantiate the following 'Shell32.Folder' and 'Shell32.FolderItems' types?
'Dim SrcFlder As Shell32.Folder = sc.NameSpace("d:\test.zip")
'Dim DestFlder As Shell32.Folder = sc.NameSpace("d:\test")
'Dim Items As Shell32.FolderItems = SrcFlder.Items()
'this will be called probably through the reflection, correct?
'DestFlder.CopyHere(Items, 16) '16 = Respond with "Yes to All"
重新阅读此示例:我主要不是询问解压缩(尽管我需要它),但我想使用后期绑定(不仅使用早期绑定)正确处理 .NET 中的 COM 对象。
【问题讨论】:
标签: .net4.0 vba .net .net vb.net com .net-4.0 late-binding