无法在控制台应用程序中引用dll,但我可以在wpf中引用

时间:2012-01-16 18:44:58

标签: c# dll skype4com

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

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

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

[System.STAThreadAttribute()]

它的主要方法!!!!!

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

使用System; 使用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