Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 灾难性故障(来自HRESULT:0x8000FFFF的异常(E_意外)):ActiveX和C控制台应用程序_C# 4.0_Com_Activex - Fatal编程技术网

C# 4.0 灾难性故障(来自HRESULT:0x8000FFFF的异常(E_意外)):ActiveX和C控制台应用程序

C# 4.0 灾难性故障(来自HRESULT:0x8000FFFF的异常(E_意外)):ActiveX和C控制台应用程序,c#-4.0,com,activex,C# 4.0,Com,Activex,所以,我正在研究ActiveX和C,以及它们如何协同工作。问题是我一开始就犯了上述错误。我采取了以下步骤: 在VS2010中,我选择了MFC ActiveX控件项目。然后我加了一个方法短乘短a,短b;右键单击解决方案资源管理器中ProjectnameLib下的_DProjectname时弹出的菜单中的Add method(添加方法)选项。该方法的代码如下所示: SHORT CSampleProgramActivex01Ctrl::Multiply(SHORT a, SHORT b)

所以,我正在研究ActiveX和C,以及它们如何协同工作。问题是我一开始就犯了上述错误。我采取了以下步骤:

在VS2010中,我选择了MFC ActiveX控件项目。然后我加了一个方法短乘短a,短b;右键单击解决方案资源管理器中ProjectnameLib下的_DProjectname时弹出的菜单中的Add method(添加方法)选项。该方法的代码如下所示:

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

     // TODO: Add your dispatch handler code here

     return ( a * b);
    }

现在我已经创建了一个简单的C控制台应用程序,它引用生成的COM文件,当我尝试使用该方法时,应用程序会因上述错误而停止。我在互联网上搜索了这个错误,但没有明确的解决方案。谢谢你的帮助。如果你们想要澄清,请告诉我。

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

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


这似乎是每个人都在遵循的解决办法。不整洁,但这是我想的标准。

< p>查看:如何在VisualC++中使用OLE控件作为自动化服务器

@HansPassant:你知道我为什么会犯这个错误吗?我尝试了从VS6到VS2010的所有不同类型的VisualStudio,但每次都出现相同的错误。您是否有通过MFCActix向导创建.ocx文件的简单教程。我这样问是因为供应商已经通过MFC ActiveX向导创建了.ocx,我在该ocx中遇到了一些其他错误。所以我尝试用同样的方法创建自己的.ocx,并模拟供应商遇到的问题。但在我过去之前,我遇到了这个错误。非常感谢您的帮助。我想知道其他意见。您也可以使用tblimp/aximp命令行实用程序生成与生成器相同的两个包装dll。然后引用System.Windows.Forms.dll,您可以实例化var ctrl=new AxSomeControl,然后是ctrl.CreateControl。所以,基本上您可以使用ocx创建控制台应用程序,但无论如何都需要引用WinForms.dll。