Не могу ссылаться на DLL в консольном приложении, но я могу в wpf - PullRequest
1 голос
/ 16 января 2012
  • У меня есть консольное приложение и приложение wpf.
  • для обоих приложений я добавил ссылку на skype4com.dll

  • Код: SKYPE4COMLib.Skype oSkype = new SKYPE4COMLib.Skype();

дает: InvalidCastExeption с указанием:

Невозможно привести COM-объект типа 'System .__ ComObject' к типу интерфейса 'SKYPE4COMLib.Skype'. Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID '{B1878BFE-53D3-402E-8C86-190B19AF70D5}' завершился ошибкой из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)) .

но когда я запускаю ту же строку кода в своем wpf-приложении, я не получаю исключения. почему!?


Мое консольное приложение работало отлично, пока не обновился Skype. Я удалил скайп, установил его снова, чтобы попытаться решить проблему, но это не помогло.

Ответы [ 2 ]

7 голосов
/ 16 января 2012

Не используйте профиль клиента для вашего консольного приложения, установите полную версию .Net.

Чтобы изменить его, перейдите в свойства проекта -> Приложение -> Target Framework (раскрывающийся список)-> Установите для него .Net Framework 4 (если это та версия .net, которую вы используете)

0 голосов
/ 17 января 2012

После долгих часов попыток я решил, где сделать wpf-приложение консольным приложением, добавив необходимые ссылки и классы. Затем я сравнил и заметил, что если я добавлю:

[System.STAThreadAttribute()]

к основному методу это работает !!!!!

в результате мой основной метод теперь должен выглядеть так:

с использованием Системы; using 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 мне пришлось добавить атрибут AspCompat, равный true.

так что мои asp.net-страницы asp.net теперь выглядят так:

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