Visual studio Visual Studio-无法再引用tlb/dll

Visual studio Visual Studio-无法再引用tlb/dll,visual-studio,tlb,Visual Studio,Tlb,我正在编写一个C应用程序,它通过COM接口与另一个程序进行通信。到目前为止,一切进展顺利 在我删除vs引用对话框中的.tlb并用reglibv12.exe将其注销后,我无法再添加它 错误显示: 无法添加对tlb路径的引用。请确保文件正确无误 是可访问的,即它是有效的程序集或COM组件 此问题不会发生在同时使用vs和默认设置的同事电脑上 到目前为止,我尝试的是: -重新安装Vs -删除Vs用户文件夹 -使用reglibv12.exe再次注册tlb -以管理员身份运行Vs -将tlb放在Vs项目文件

我正在编写一个C应用程序,它通过COM接口与另一个程序进行通信。到目前为止,一切进展顺利

在我删除vs引用对话框中的.tlb并用reglibv12.exe将其注销后,我无法再添加它

错误显示:

无法添加对tlb路径的引用。请确保文件正确无误 是可访问的,即它是有效的程序集或COM组件

此问题不会发生在同时使用vs和默认设置的同事电脑上

到目前为止,我尝试的是: -重新安装Vs -删除Vs用户文件夹 -使用reglibv12.exe再次注册tlb -以管理员身份运行Vs -将tlb放在Vs项目文件夹中
-使用Gacutil.exe\l->列出未列出我的tlb的程序集

Regtlibv12.exe是一个危险的工具。它在网页中经常被提及,程序员发现它可以为许可证限制提供一个解决方案。供应商倾向于提供两个不同的安装程序,一个安装组件的运行时支持,并且是免费的,可以在用户的机器上安装产品。还有一个只有在您支付许可证费用时才能获得,用于在开发人员机器上编写使用该组件的代码。区别在于前者不注册类型库,后者注册。不想支付费用,或者只有一个许可证但被多个开发人员使用,或者有一个头发尖尖的老板认为一个许可证应该对每个人都足够好,并且软件永远不会改变,这往往会让程序员寻找替代品

使用它来注销类型库在实践中永远不会有任何用处。它只会销毁注册表项,不会卸载任何内容。销毁注册表项通常只会产生两个新问题。这也使得组件供应商很难帮助您,他们只是不希望您使用像这样的钝器工具。最好的做法是使用供应商提供的安装程序并重新安装组件。通常,您必须先卸载,才能使所有内容恢复原样

在C程序中使用类型库有三种不同的方法:

项目>添加引用>COM选项卡>勾选列表中的条目。这是最好的方法,并提供了最好的保证,使您的程序能够正确使用该组件,并且能够跟上组件中的更改。唯一真正的问题是,如果您只知道类型库文件名,那么选择哪个条目并不总是非常明显。如果需要,可以反编译类型库并找到描述,请运行OleView.exe>File>View Typelib

项目>添加引用>浏览按钮>选择嵌入类型库的.tlb文件或可执行文件。你现在想做什么。仅当组件未在计算机上注册或您有意构建程序以该组件的旧版本为目标时才需要。这是一种脆弱的方法,很容易在您使用的类型库和实际安装的组件之间产生不匹配。不幸的是,错误报告很糟糕,如果类型库转换不是完美无缺的,那么它会生成一条it not work错误消息。你正在看的那个

从开发人员命令提示符运行Tlbimp.exe。这将提前生成互操作库,而不是在构建时生成互操作库的前两个项目符号。这是诊断类型库问题的最佳方法,这种方法会导致第二个项目失败。或者在生成服务器上可能有用。如果类型库包含无法直接转换的项,您将看到警告。这是很常见的,不一定是致命的。如果您这样做,那么您通常希望项目目录中的互操作库并签入到源代码管理。使用“浏览”按钮添加引用。请记住,当供应商组件发生更改时,您必须重新执行此操作

关注第一颗子弹。我应该注意到,拥有一个.tlb文件是相当不寻常的。在绝大多数情况下,组件作者将在DLL中嵌入类型库。一个原因可能是该组件实际上是用.NET语言开发的,使用[ComVisible]属性非常容易。类型库转换器对此非常生气,坚持要求您向.NET程序集添加一个普通引用