【问题标题】:Cannot reference a dll in console application but I can in wpf无法在控制台应用程序中引用 dll,但我可以在 wpf 中
【发布时间】:2012-01-16 18:44:57
【问题描述】:
  • 我有一个控制台应用程序和一个 wpf 应用程序。
  • 在两个应用程序上我都添加了 skype4com.dll 参考

  • 代码:SKYPE4COMLib.Skype oSkype = new SKYPE4COMLib.Skype();

给出:InvalidCastExeption 声明:

无法将“System.__ComObject”类型的 COM 对象转换为接口类型“SKYPE4COMLib.Skype”。此操作失败,因为 IID 为“{B1878BFE-53D3-402E-8C86-190B19AF70D5}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE)) .

但是当我在我的 wpf 应用程序中运行同一行代码时,我没有收到异常。为什么!?


在 Skype 更新之前,我的控制台应用程序运行良好。我卸载了Skype,再次安装它以尝试解决问题,但这并没有帮助。

【问题讨论】:

    标签: c# dll skype4com


    【解决方案1】:

    不要为您的控制台应用使用客户端配置文件,请将其设置为完整的 .Net 版本。

    您可以通过进入项目属性 -> 应用程序 -> 目标框架(下拉)-> 将其设置为 .Net Framework 4(如果它是您正在运行的 .net 版本)来更改它

    【讨论】:

    • 为我的控制台应用程序修复了它,但它没有为我的 .asp 应用程序修复。我认为如果它要在我的控制台应用程序中工作,它就会在我的 asp 应用程序中工作。 1 小时前它运行良好,直到 Skype 更新。
    【解决方案2】:

    经过长时间的尝试,我决定通过添加必要的引用和类来使我的 wpf 应用程序成为控制台应用程序。然后我比较了,我注意到如果我添加:

    [System.STAThreadAttribute()]
    

    到它工作的主要方法!!!!!

    因此,我的主要方法现在应该如下所示:

    使用系统; 使用 System.Collections.Generic; 使用 System.Linq; 使用 System.Text;

    namespace ConsoleApplication3
    {
    
        class Program
        {
            [System.STAThreadAttribute()]                
            static void Main(string[] args)
            {
                SKYPE4COMLib.Skype oSkype = new SKYPE4COMLib.Skype();
            }
        }
    }
    

    在 asp.net 上没有 main 方法。嗯,不是我知道的。所以在 asp.net 中我必须添加等于 true 的 AspCompat 属性。

    所以我的 asp.net aspx 页面现在看起来像:

        <%@ Page AspCompat="true" Language="C#" .... etc
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多