Класс не может быть встроен.Вместо этого используйте соответствующий интерфейс - PullRequest
23 голосов
/ 19 ноября 2010

Я использую WIA для захвата изображения со сканера в форму окна. Вот код, который я использую:

private void button2_Click(object sender, EventArgs e)
{
    const string wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";
    CommonDialogClass wiaDiag = new CommonDialogClass();
    WIA.ImageFile wiaImage = null;

    wiaImage = wiaDiag.ShowAcquireImage(
            WiaDeviceType.UnspecifiedDeviceType,
            WiaImageIntent.GrayscaleIntent,
            WiaImageBias.MaximizeQuality,
            wiaFormatJPEG, true, true, false);

    WIA.Vector vector = wiaImage.FileData;

    Image i = Image.FromStream(new MemoryStream((byte[])vector.get_BinaryData()));
    i.Save(@"D:\prueba1.jpeg");
}

При попытке выполнить этот маленький тест я получаю эту ошибку:

Тип взаимодействия 'WIA.CommonDialogClass' не может быть встроен Используйте применимые вместо интерфейса.

А это:

«WIA.CommonDialogClass» не содержать определение для 'ShowAcquireImage' и без расширения метод ShowAcquireImage, принимающий первый аргумент типа 'WIA.CommonDialogClass' может быть найден (Вы пропустили директиву использования или ссылка на сборку?

Я предполагаю, что вторая ошибка возникает из-за первой ошибки, верно?

Есть предложения, как это исправить?

Ответы [ 3 ]

26 голосов
/ 19 ноября 2010

Вторая ошибка вызвана первой.Функция Embed Interop Types поддерживает только интерфейсы встраивания, а не классы.Помимо установки этой опции в ссылке WIA на False и развертывания библиотеки взаимодействия, вы также можете исправить это следующим образом:

 WIA.CommonDialog wiaDiag = new WIA.CommonDialog();

Не интуитивно понятно, но создает интерфейсы COM с оператором new позволено.Вам необходимо добавить префикс имени пространства имен, потому что CommonDialog неоднозначен с классом Winforms CommonDialog.

9 голосов
/ 10 июня 2013

http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307

Эта ошибка возникает из-за того, что по умолчанию установлено значение true для свойства «Внедрить взаимодействия» сборки взаимодействия TestStand API, на которую есть ссылка в новом проекте.Чтобы устранить эту ошибку, измените значение свойства Embed Interop Types на False, выполнив следующие действия:

Select the TestStand Interop Assembly reference in the references section of your project in the Solution Explorer.
Find the Embed Interop Types property in the Property Browser, and change the value to False

Ссылки по теме: База знаний 595FQJPI: Можно ли использовать Visual Studio 2010 с TestStand и вызывать .NET Framework 4.0Кодовые модули?

4 голосов
/ 02 августа 2014

Просто, вы просто выбираете сборку ошибок в Панель решений / Ссылки. Затем нажмите Alt-Enter (Свойства), найдите «Embed Interop Type» и установите его значение «False», если оно True Бргс!

...