代码之家  ›  专栏  ›  技术社区  ›  pencilslate

调用COM组件时返回错误HRESULT E\U FAIL

  •  42
  • pencilslate  · 技术社区  · 14 年前

    在Silverlight4应用程序中;此错误意味着什么?:

    “对COM组件的调用返回错误HRESULT E\U FAIL。”

    这是一个非常普遍的错误。VS调试器在调试时没有指向错误的确切位置。

    24 回复  |  直到 8 年前
        1
  •  20
  •   Rachel    13 年前

    这是一个老问题,但我想我会给出我的答案,因为我在谷歌上找到了这个完全相同的问题。

    在我的例子中,我从web上复制了一些示例XAML,以便开始使用SilverlightToolkit4。这个示例XAML包含一个简单的按钮和一个click事件处理程序,它与我的代码隐藏中实际存在的任何处理程序都不相关。一开始我没有注意到这个简单的问题,因为编译器没有给我一个错误消息,我只是在运行时看到上面的“error HRESULT E_FAIL has returned from a COM component”消息。只有当我将我的示例XAML复制到一个全新的Silverlight应用程序中而没有任何其他内容时,真正的潜在问题才在编译时被揭示出来。

    因此,如果您在运行时收到了相同的错误消息,我的建议是仔细检查XAML,看看是否有任何错误,这些错误本来应该在编译时被发现,但由于某种原因,这些错误最终成为上面提到的运行时错误。为了调试,你可以像我一样,在一个没有其他内容的独立Silverlight应用程序中隔离导致错误的代码,然后看看是否像我一样得到一条更有用的错误消息来指导您。

        2
  •  12
  •   Malik Khalil    8 年前

    步骤1:关闭Visual Studio
    *.锁 文件夹

    注意:当多个用户在 相同的 项目 具有 .suo 不支持文件 环境。

        3
  •  6
  •   greensuisse    12 年前

    在我的情况下:

    class MyControl : ContentControl {
    }
    

    默认情况下,类不是公共的,XAML无法加载它并引发异常

    调用COM组件时返回错误HRESULT E\U FAIL

    微软应该提供更多的信息,而不仅仅是在没有任何堆栈跟踪的情况下抛出一个神秘的错误消息。

        4
  •  3
  •   orellabac    13 年前

    我刚刚添加了参考,一切都解决了:)

        5
  •  2
  •   IsolatedStorage    14 年前

    我在使用当前的SL4 Telerik控件时出现了这个错误。类似的问题也有报道 here 有了解决方案。。。差不多吧。问题似乎出在ExpressionBlend管理控件缓存的方式上。

        6
  •  2
  •   Luke Woodward    13 年前

    这里有一种生成这个错误的方法,我今天偶然发现了这个方法。XAML中有以下按钮:

        <Button x:Name="button" Click="Button_Click" Content="Click me" />
    

    处理按钮的 Click

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            button.Margin = new Thickness(0, double.NaN, 0, 0);
        }
    

    当我点击按钮时,我得到了前面提到的错误。如果我替换,也会出现同样的错误 NaN 具有 PositiveInfinity NegativeInfinity .

    Thickness 构造函数包含

        7
  •  2
  •   Ben Parsons    12 年前

    这个错误是由于XAML的问题造成的。奇怪的是我缺少 Style Margin 属性-这意味着应用程序运行良好,甚至resharper也只报告一个“提示”。

    StaticResource 风格 属性不是我第一次检查的地方!

        8
  •  2
  •   ilke.uygun    11 年前

        9
  •  2
  •   Esoteric Screen Name    11 年前

    IIS应用程序池必须作为对Team Foundation Server具有查询访问权限的帐户运行。这就解决了我的问题。

        10
  •  1
  •   Davut Gürbüz    13 年前

    这个问题的主要原因是依赖于这个组件。

    解决方案很容易,但需要时间:)清理项目并重建所有项目。当你再次进入设计,你应该看到一切都是好的!

    我希望这有帮助!

    如果您最近看到此异常,请尝试重新安装silverlight sdk4。

        11
  •  1
  •   Legolas Greenleaf    13 年前

    这是一个安全和权限问题。查看IIS并确保启用了集成安全性。然后将应用程序保护级别设置为“中”(如果它很高,则可能是这样的结果)。然后检查你的网络配置文件。确保“模拟”处于禁用状态。

    这应该有帮助。

        12
  •  1
  •   itsho    12 年前

    Microsoft表达式 :

    // Set bitrate
    liveJob.OutputFormat.VideoProfile.Bitrate = new ConstantBitrate(2500);
    
    // Set Video size
    liveJob.OutputFormat.VideoProfile.Size = new Size(320,240); 
    

    当然,这是我的错-我在代码中调用了这个方法,它也被Click事件调用。。。

        13
  •  1
  •   Sani Yusuf    11 年前

        14
  •  1
  •   MrCoincidence    11 年前

    以下是我们在尝试使用时最终解决这个问题的方法MICROSOFT.TEAMFOUNDATION查询Team Foundation Server时的库:

    1. Team Foundation Explorer必须与应用程序中引用的当前版本一起安装。
    2. MSDTC配置。(参见下面的DTC配置)
    3. IIS应用程序池必须作为对Team Foundation Server具有查询访问权限的帐户运行
    4. IIS应用程序池必须作为在IIS服务器上具有COM访问权限的帐户运行(我们有一个专用服务器,因此我们将标识用户设置为本地服务器上的管理员)。

    DTC配置----

    1. 单击“开始”,单击“运行”,键入dcomcnfg,然后单击“确定”打开“组件服务”。
    2. 在控制台树中,单击展开组件服务,单击展开计算机,单击展开我的计算机,然后单击展开分布式事务协调器。
    3. 右键单击本地DTC,然后单击属性以显示本地DTC属性对话框。
    4. 单击安全选项卡。
    5. 在“客户端和管理”部分,选择“允许远程客户端”和“允许远程管理”。
    6. 在事务管理器通信部分,选择allowinbound和allowoutbound。
    7. 在“事务管理器通信”部分中,选择“需要相互身份验证”(如果所有远程计算机都运行Windows Server 2003 SP1或Windows XP SP2或更高版本),选择“需要传入呼叫者身份验证”(如果在群集中运行MSDTC),或者选择“不需要身份验证”(如果某些远程计算机是Windows Server之前的版本)2003 SP1或Windows XP SP2之前的版本。建议选择不需要身份验证。

        15
  •  1
  •   Rocklan    11 年前

    我的问题是缺少风格。我用自定义画笔重写了控件模板,如下所示:

    <Style x:Key="MyCustomStyle" TargetType="Thumb">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Thumb">
                    ....
                    <TextBlock Foreground="{StaticResource MyCustomBrush}"
    

    <SolidColorBrush x:Key="MyCustomBrush" Color="#FFAC0909"/>
    

    然后砰的一声,应用程序没有启动,我收到了COM错误消息。

        16
  •  1
  •   Max Meng    11 年前

    最后,我发现问题出在XAML页面中,我可能无意中删除了一个图像对象的边距设置中的一个参数,orz。。

    Margin="0,-20,0" 
    

    Margin="0,-20,0,0" 
    

    显然,我没有意识到我曾经修改过XAML的任何内容,所以我已经“有一段时间”对代码进行了故障排除。。

        17
  •  1
  •   Rob Koch    10 年前

    对我来说,我把它缩小到一个SplitButton控件,我很久以前从CodePlex下载的。我已经将解决方案从Silverlight 4升级到Silverlight 5,并受到这个错误的猛烈抨击。我将XAML注释到所有控件,然后逐个取消注释,直到再次出现错误:

    System.Reflection.TargetInvocationException was unhandled by user code
      Message=Exception has been thrown by the target of an invocation.
      StackTrace:
           at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
           at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
           at System.Delegate.DynamicInvokeImpl(Object[] args)
           at System.Delegate.DynamicInvoke(Object[] args)
           at Homexaml_3.BindingOperation(Object BindingState, Int32 , Action )
      InnerException: 
           Message=Error HRESULT E_FAIL has been returned from a call to a COM component.
           StackTrace:
                at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
                at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize)
                at System.Windows.UIElement.Measure(Size availableSize)
    

    修复它的方法是手动删除过时的引用系统.Windows.Control以及System.Windows.控件.Toolkit然后从Silverlight 5 SDK文件夹中重新添加它们。

    希望它能帮助别人(也能帮助我!)如果几个月后再发生这种事。

        18
  •  1
  •   elliott.io    10 年前

     Dispatcher.BeginInvoke(() =>
     {
          // your code
     });
    
        19
  •  1
  •   Joy Rex    9 年前

    大多数时候很难看到问题的确切位置,尤其是在XAML中。 另一种找出失败之处的方法是执行以下步骤

    1. 单击调试->异常。它会显示例外列表。
    2. 单击“添加…”按钮。
    3. 点击“确定”按钮。选定的异常将突出显示。确保选中了异常的复选框。再次单击“确定”按钮关闭对话框。
    4. 现在你有两个选择,

      • 单击显示的异常屏幕的查看详细信息。挖掘 源代码。

        20
  •  1
  •   Onosa    8 年前

    对我来说,这是一个XAML解析错误。在数据模板中,我有一个额外的 S 在两个标签之间(可能是因为我按下了 而不是 控制 + S ). 例如。。。

    <DataTemplate>
       <Border/>s
    </DataTemplate>
    

    因此,我建议您在视图中查找格式错误的XML,在显示时会导致此异常。

        21
  •  1
  •   Vlad Pulichev    7 年前

    在我的例子中,当我试图将数据库导入到SSDT项目中时,但是这个数据库已经在project中,但是它是空的。我刚刚更新了我的项目 Tools -> SQL server -> New schema comparsion . 源-数据库,目标-项目。比较-更新。

    希望这对某人有帮助

        22
  •  0
  •   ouflak    10 年前

    在我的特定情况下,名称空间似乎有问题。我的UserControl在它自己的命名空间中(创造性地命名为“UserControls”)。我的页面在它们自己的命名空间(“Pages”)中。我想从我的UserControl中引用Pages命名空间中的枚举定义,所以我只添加了一个using语句: using MySolution.Pages; . 太微不足道了,我不想相信这就是问题所在。但是当我删除using语句并在UserControls命名空间中简单地创建了enum时,就没有了HRESULT错误,而且,作为一个额外的好处,我在UserControl中定义的依赖属性,在Xaml intellisense中神秘地没有显示出来,突然就出现了,可以使用了。

        23
  •  0
  •   Saraf Talukder    10 年前

    我通过删除XAML文件并从addnewitem中添加一个新文件来修复这个错误。然后我粘贴了旧文件中的XAML代码。

        24
  •  0
  •   Ashish Singh    6 年前

    这是一个老问题,但在我的情况下,上述解决方案都不起作用。 我在试着更新NuGet包

    update-package : Failed to add reference to 'System.Web.Razor'.
      Error HRESULT E_FAIL has been returned from a call to a COM component.
    

    事实上,其他NuGet命令(如restore package)失败,并显示类似的异常消息。

    我发现包目录下缺少几个程序集,所以我 已删除包目录 回到了2017年的Visual Studio。当我打开解决方案时,它要求我恢复包,然后,我能够更新包。

    注意:备份 包裹

        25
  •  0
  •   kornman00    4 年前

    我在安装VS2019并试图打开一个大型解决方案(20多个项目)时遇到了同样的错误,该解决方案同时包含vcxproj和csproj项目,目标是VS2015。csproj都加载良好,而vcxproj则由于操作错误而失败。删除.vs文件夹无效。

    所做的工作是在“浏览数据库回退”设置下设置VC++的“回退位置”。

    Tools (menu)
    -Options...
    --Text Editor
    ---C/C++
    ---Advanced
    ----Browsing Database Fallback
    -----Fallback Location
    

    我把我的设置为 D:\VC++\v16