2013-02-26 87 views
3

这个问题的基础来源于此教程support.microsoft.com: http://support.microsoft.com/kb/176792如何使用vbc命令行编译器(无IDE)引用COM库像shdocvw?

To run the following code, it is necessary to add a reference to 
"Microsoft Internet Controls" (Shdocvw.dll) and "Microsoft HTML Object 
Library" (Mshtml.dll) to the Visual Basic project: 
Dim SWs As New SHDocVw.ShellWindows 
Dim IE As SHDocVw.InternetExplorer 

这工作在Visual Studio 2010罚款,但似乎依靠一些幕后的神奇,我不能使用直接命令行vbc编译器进行复制。

很明显,命令行编译器没有“添加引用”对话框。我天真地尝试添加:

/reference:"C:\windows\system32\shdocvw.dll”

到命令行,但是这并没有帮助。在这两种情况下,我得到:

错误BC30002:类型 'SHDocVw.ShellWindows' 没有定义。

错误BC30002:类型'SHDocVw.InternetExplorer'未定义。

我已经成功地使用了其他语言如vbscript和autohotkey的shdocvw.dll和AKA Shell.Application,但是我目前对VB.NET的了解太少,无法知道我是否做错了,不可能。

+0

作为参考,有一个构建窗口显示IDE运行的命令。将引用添加到VS中的项目,构建,并查看它生成的命令行的外观。 :P – cHao 2013-02-26 20:58:46

+0

其中,“/链接”到Interop.SHDocVw.dll,这是我在上面提到的一些魔术:)我不会有这个DLL只在我的.vb源文件夹的裸文件夹中,在只有命令行的情况下。 – amonroejj 2013-02-26 21:43:40

回答

2

您必须先运行Tlbimp.exe工具。这是从嵌入在shdocvw.dll中的类型库生成互操作库的工具,通常在IDE中添加引用时自动完成。它会生成interop.shdocvw.dll,它是您需要使用/ reference选项传递的文件。

+0

确实,我试过这个,它工作。 我很好奇,为什么tlbimp.exe不包含在C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319与vbc.exe一起。我在C:\ Program Files \ Microsoft SDK \ Windows \ v7.0A \ bin中找到了一个副本。 – amonroejj 2013-02-27 16:14:18

+0

这是一个只对程序员有用的构建工具。因此存在于SDK目录中。 – 2013-02-27 16:16:15

+0

有人可能会说vbc.exe本身是一样的:) – amonroejj 2013-02-27 17:59:38