Подтвердить что ты не робот

Класс не может быть встроен. Вместо этого используйте соответствующий интерфейс

Я использую 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");
}

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

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

И это:

'WIA.CommonDialogClass' не делает содержат определение 'ShowAcquireImage' и расширение метод 'ShowAcquireImage', принимающий первый аргумент типа "WIA.CommonDialogClass" можно найти (вам не хватает директивы using или ссылка на сборку?

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

Какие-нибудь предложения по устранению этого?

4b9b3361

Ответ 1

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

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

Разрешено неинтуитивное, но создание COM-интерфейсов с новым оператором. Вам нужно указать имя пространства имен, поскольку CommonDialog неоднозначно с классом Winforms CommonDialog.

Ответ 2

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

Эта ошибка возникает, потому что значение по умолчанию истинно для свойства Embed Interop Types сборки TestStand API Interop, на которое ссылается новый проект. Чтобы устранить эту ошибку, измените значение свойства 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

Ссылки по теме: KnowledgeBase 595FQJPI: могу ли я использовать Visual Studio 2010 с тестовыми модулями TestStand и Call.NET Framework 4.0?

Ответ 3

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