【问题标题】:COM constructor throwing InvalidCastExceptionCOM 构造函数抛出 InvalidCastException
【发布时间】:2011-06-02 16:20:39
【问题描述】:

我想在 IDL 文件中声明一个托管类(用 C#/.NET 构建),但是当我为它添加一个 coclass 时,我稍后会在构造函数完成并返回时得到一个 InvalidCastException。 (无法将对象“MyThing”转换为类型“MyThingClass”。)

所以在我的测试应用程序(也是 C#/.NET)中注册 tlb 后,它理解到足以调用真正的构造函数。我什至可以调试它。一切都很好,直到它必须从构造函数中返回。

我曾考虑尝试使用 importlib 将 DLL 拉入 IDL,但我需要在构建之前使用 tlb(鸡或蛋问题)。

用谷歌搜索这个问题只会发现简单的转换问题。

有什么想法吗?

【问题讨论】:

  • 你有没有看过这些问题stackoverflow.com/search?q=idl+c%23
  • 也许提供一个例子可能会让更多人回答>
  • 为什么要手动创建 IDL 而不是使用 Tlbexp/Regasm?如果服务器和客户端都是用托管代码编写的,那你为什么还要使用 COM?

标签: c# .net exception com


【解决方案1】:

一般来说,我们创建一个 COM 接口,然后确保该类实现了该接口。 VB6 无法理解所有 .NET 类,这从一开始就是一个问题。有 2 本书我非常了解,可以推荐阅读:
.NET 2.0 Interoperability Recipes
Professional Visual Basic Interoperability

第二本书更老,涵盖了 .NET 1,但仍有一些有用的观点。

我的猜测是,根据您提到的内容,您正在返回一个 VB(好吧,这可能是 VC++ 或其他)无法弄清楚的类。

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2014-08-10
    • 2011-11-04
    • 1970-01-01
    • 2013-01-01
    • 2015-09-10
    相关资源
    最近更新 更多