c# - C# 中 COM 的松散耦合或如何避免 COMException 0x80040154

标签 c# com vb6 sharpdevelop

我有一个正在开发的 .Net 2 C# 应用程序,它使用 VB 6 生成的 COM DLL。 VB DLL 经常更新任何我的应用程序崩溃与 System.Runtime.InteropServices.COMException (0x80040154)。我使用的 COM DLL 部分没有改变,但版本(和 CLSID)会改变。

引用的“特定版本”选项为 false。 WrapperTool 是 tlbimp。

如何告诉我的应用程序不要担心 DLL 中的更改?有什么方法可以只检查我正在使用的功能吗?

最佳答案

这是最常见的 COM 错误之一,“类未注册”。它从 VB6 开始,它有一个控制二进制兼容性的选项。忘记具体长啥样了,时间太久了。如果您不控制它,VB6 将创建一个具有不同 CLSID 值的新 COM 服务器。这需要使用 Regsvr32.exe 重新注册 DLL。并使用 Tlbimp.exe 重新生成互操作库。您可能错过了后一步。

请注意,使用不同的 CLSID 值是 COM 的硬性要求,它必须在公共(public)接口(interface)更改时完成。但不是只有实现发生变化。

关于c# - C# 中 COM 的松散耦合或如何避免 COMException 0x80040154,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2451261/

相关文章:

c# - 未经 Microsoft 许可,我可以使用 MSDN 中的示例代码吗?

javascript - Ajax Minifier (AjaxMin) - JavaScript 的 EvalTreatment?

c# - 如何在 Blazor WebAssembly 中获取静态图像文件的文件路径列表?

com - 将对象嵌入到 Microsoft Word 和 OpenOffice Writer 中

c++ - WScript.CreateObject 在调用 C++ COM dll 函数时返回空

c# - 有没有办法将消息从 C#.NET 程序集(ActiveX)发送到 VB6 应用程序?

c# - 具有大量非原始类型列表的 Protocol Buffer 序列化

c# - 使用 COM 接口(interface)时出现 System.InvalidCastException

excel - 免费的 VB6/VBA 分析器和 Excel 最佳实践

vb6 - 检查VB6集合中是否存在记录?