1
  • 我有一个控制台应用程序和一个 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,再次安装它以尝试解决问题,但这并没有帮助。

4

2 回答 2

7

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

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

于 2012-01-16T18:47:02.337 回答
0

经过长时间的尝试,我决定通过添加必要的引用和类来使我的 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 上没有主要方法。嗯,不是我知道的。所以在 asp.net 中我必须添加等于 true 的 AspCompat 属性。

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

    <%@ Page AspCompat="true" Language="C#" .... etc
于 2012-01-17T03:50:26.180 回答