我项目中用到了Interop.Release_2012组件,为什么在我自己的电脑上运行程序没问题,换台电脑就报下面的错误呢。我在本机和那台电脑上都注册了该组件的。
System.InvalidCastException: 无法将类型为“Release_2012.AppSQLClass”的 COM 对象强制转换为接口类型“Release_2012._AppSQL”。此操作失败的原因是对 IID 为“{C2A2F021-D21F-405A-9FB8-C7D309E23DC4}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。 在 System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease) 在 Release_2012.AppSQLClass.InitSql(String& Server, String& UserID, String& Password, String& DataBase)
首先你得确认 Interop.Release_2012 是一个 COM 组件。
可在注册表中查找一下 C2A2F021-D21F-405A-9FB8-C7D309E23DC4 ,是否注册成功。
能确定它是个COM组件,但怎么查找确定C2A2F021-D21F-405A-9FB8-C7D309E23DC4是否注册成功呢
@长风一剑: 在注册表里搜 C2A2F021-D21F-405A-9FB8-C7D309E23DC4,存储COM组件信息的就那么几个键。
另外,我从你组件的名字上看出些问题,所以你得确定 Interop.Release_2012 是一个 COM 组件,还是一个用以实现同一个COM组件交互的互操作程序集?所以,我再追问一个问题,Interop.Release_2012.dll是托管代码的吗?我猜测应该是。如果是的话,那么前一个问题就该是后者。
@程序猿.码农: 恩,这个是用以实现COM组件的互操作程序集,那该问题怎么解决呢,不胜感激
@程序猿.码农: 是不是还要注册adodb?
@长风一剑: 那你就要知道 Interop.Release_2012.dll 是通过哪个 COM 组件生成的,然后你就在部署的机器上注册那个 COM 组件。可以通过在注册成功的机器上的注册表中检索出 C2A2F021-D21F-405A-9FB8-C7D309E23DC4 对应的组件。
@程序猿.码农: 注册表中找不到C2A2F021-D21F-405A-9FB8-C7D309E23DC4 对应的组件。
@长风一剑: 找不到,那你编译的时候,是怎么生成 Interop.Release_2012 这个的?
@程序猿.码农: 这个组件是别的部门开发的DLL,我这边直接引用进来的
@长风一剑: 那你问问他们呗。
你的电脑和另外一台电脑的 NET Framework版本一样吗?
都是4.0的,还有一个是4.5的,其中一个4.0的能运行,另一个4.0的和那个4.5的都不行