【问题标题】:Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED)): ActiveX and C# Console Application灾难性故障(HRESULT 异常:0x8000FFFF (E_UNEXPECTED)):ActiveX 和 C# 控制台应用程序
【发布时间】:2012-10-22 10:33:06
【问题描述】:

所以,我正在玩弄 ActiveX 和 C# 以及它们如何协同工作的方式。问题是我一开始就遇到了提到的错误。我遵循的步骤:

在 VS2010 中,我选择了 MFC ActiveX Control 项目。然后我添加了一个方法“SHORT Multiply(SHORT a, SHORT b);”通过单击在解决方案资源管理器中右键单击 ProjectnameLib 下的 _DProjectname 时弹出的菜单中的添加方法选项。该方法的代码如下:

    SHORT CSampleProgramActivex01Ctrl::Multiply(SHORT a, SHORT b)
    {
      AFX_MANAGE_STATE(AfxGetStaticModuleState());

     // TODO: Add your dispatch handler code here

     return ( a * b);
    }

现在我创建了一个简单的 C# 控制台应用程序,它引用了生成的 COM 文件,当我尝试使用该方法时,应用程序停止并出现上述错误。我在互联网上搜索了错误,但没有提到明确的解决方案。任何帮助表示赞赏。如果你们想要澄清,请告诉我。

【问题讨论】:

  • @HansPassant:你知道我为什么会收到这个错误吗?我尝试了从 VS6 到 VS2010 的所有不同类型的 Visual Studio,但每次都遇到相同的错误。您是否有通过 MFC ActiveX 向导创建 .ocx 文件的简单教程。我之所以这样问,是因为供应商已通过 MFC ActiveX 向导创建了 .ocx,而我在该 ocx 中遇到了其他一些错误。所以我试图以同样的方式创建我自己的 .ocx 并模拟供应商遇到的问题。但在我去那里之前,我遇到了这个错误。任何帮助表示赞赏。

标签: c#-4.0 com activex


【解决方案1】:

我不知道这是否被认为是解决问题,但我找到了解决方法:

首先我创建了 C# windows 窗体应用程序,而不是 C# 控制台应用程序。创建表单后,我已将整个 ocx 作为组件添加到工具箱中。您可以通过右键单击工具箱菜单中的工具箱类型来执行此操作。在新菜单中,单击选择项目。这会弹出新菜单,然后选择 COM 选项卡,然后检查您的 COM 组件,COM 组件将被添加到工具箱菜单中。现在将组件拖放到菜单上,您应该可以开始了。

这似乎是每个人都在遵循的解决方法。不整洁,但这是我认为的常态。

【讨论】:

  • 我想知道其他意见。
  • 您还可以使用 tblimp / aximp 命令行实用程序来生成与生成器相同的两个包装 dll。然后引用 System.Windows.Forms.dll,您可以实例化您的 var ctrl = new AxSomeControl(),然后是 ctrl.CreateControl()。所以基本上你可以使用 ocx 来使用控制台应用程序,但无论如何你都需要引用 WinForms .dll。
【解决方案2】:

看这里:如何在 Visual C++ 中使用 OLE 控件作为自动化服务器 http://support.microsoft.com/kb/146120/en-us

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 2016-07-06
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 2012-03-24
    相关资源
    最近更新 更多