在C#中使用COM组件会导致InvalidCastException

时间:2016-12-21 17:43:17

标签: com com-interop atl

我有一个COM组件,我们使用TLBIMP工具创建了一个interop dll,当访问默认接口时,它有时会失败并出现InvalidCastException(无法转换类型为System .__ ComObject'的COM对象)

CORE::evalbytes

IDL声明

private void SomeMethod(IMyInterface iObj)
 {
      **//Following cause error InvalidCastException, not always but Intermittently**
      //MyComponent comp = new MyComponentClass();    
      //comp= iObj as MyComponent


      **//The below code works fine.**
      IMyInterface comp = new MyComponentClass();
      comp = iObj;
}

知道为什么上面函数中的注释代码会因错误而失败? 同样,MyComponent comp = new MyComponentClass()行应该返回默认接口,在这种情况下,LHS变量不应该是interface类型。

1 个答案:

答案 0 :(得分:-1)

此MSDN博客描述了类似的错误,并提供了有关如何发生这种情况的一些详细信息:https://social.msdn.microsoft.com/Forums/vstudio/en-US/b11a0f90-fcc5-487a-b057-632f5415bfc2/problems-with-primary-interop-assembly-versioning?forum=csharpgeneral

此外,这可能值得一读:http://blogs.agi.com/engine/?p=502