我在.Net Web应用程序中使用COM dll.这适用于多台不同的机器.
但是在一台特定的机器上,我收到以下错误:
无法将“CServer.CApplicationClass”类型的COM对象强制转换为接口类型“CServer.ICApplication”.此操作失败,因为对于具有IID'{CF0DFA28-046B-4C7D-8AA9-F4B7477D8CAE}的接口的COM组件的QueryInterface调用由于以下错误而失败:加载类型库/ DLL时出错. (来自HRESULT的异常:0x80029C4A(TYPE_E_CANTLOADLIBRARY)).
我使用regsvr32命令注册了dll.
我还为这个dll创建了一个COM应用程序.
通过注册表运行搜索
我可以在很多地方找到钥匙.
我也尝试取消注册dll并将计算机上的所有引用删除到此dll.然后重新添加dll并重新注册它.
我写了一个简单的Windows脚本文件来测试dll.这很好用.但是我的.net项目中存在问题,该项目在iis中运行.
谁能帮我这个?..
如果您需要更多信息,请发表评论.谢谢.
最佳答案 我有一个类似的问题,“TYPE_E_CANTLOADLIBRARY”消息.
背景:
我有一个使用Interop.ReferenceA.dll的项目.此文件是使用tlbimp ReferenceA.dll / out:Interop.ReferenceA.dll创建的.
解:
当我使用RegDllView查看ReferenceA.dll时,我注意到ReferenceA.dll有一个子类,它是错误消息中显示的IID.
我查看了子类的源代码,发现它与Interop.ReferenceB.dll有依赖关系.
事实证明,子类需要Interop.ReferenceB作为类型库才能工作.所以我跑了这个:
regasm /tlb:Interop.ReferenceB.tlb Interop.ReferenceB.dll(使用了32位版本的regasm.)
错误消失了.