C#调用COM DLL出现80040154异常但VB正常,求解决方案
解决C#调用COM接口时Fruit类报80040154(类未注册)异常的方案
核心问题分析
同属Library COM库的Car类能正常实例化,说明库本身已完成注册,问题出在Fruit类的注册匹配、项目配置或Interop元信息上。以下是针对性解决办法:
检查COM组件与C#项目的位数匹配
打开注册表编辑器(运行regedit),搜索Library.Fruit的CLSID,查看其注册项位于HKEY_CLASSES_ROOT\CLSID\{你的CLSID}下的InprocServer32路径,确认组件是32位还是64位。
右键C#项目→属性→生成→平台目标,将其修改为与COM组件一致的位数(如x86或x64),同时同步修改解决方案平台的位数设置,避免编译冲突。重新生成Interop程序集
删除项目中已有的Interop.Library引用,重新通过“添加引用→COM→选择目标Library”添加;或使用tlbimp工具手动生成:tlbimp.exe Library.dll /out:Interop.Library.dll将生成的Interop程序集添加到项目引用,确保
Fruit类的元信息被正确导入。以管理员权限运行开发环境
部分COM类的注册表项需要管理员权限才能读取,尝试以管理员身份启动Visual Studio,再编译运行项目,验证是否因权限不足导致无法读取Fruit类的注册信息。直接通过CLSID实例化Fruit类
若上述方法无效,可尝试跳过Interop的类名映射,直接用CLSID实例化:// 替换为Fruit类实际的CLSID Guid fruitClsid = new Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"); Fruit a = (Fruit)Activator.CreateInstance(Type.GetTypeFromCLSID(fruitClsid));
内容的提问来源于stack exchange,提问作者Lemonbonbon
相关产品推荐
相关产品推荐

