2010-11-18 14 views
23

Estoy usando WIA para capturar una imagen del escáner en el formulario de Windows. Aquí está el código que estoy usando:La clase no se puede incrustar. Use la interfaz correspondiente en su lugar

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"); 
} 

Al intentar ejecutar esta pequeña prueba, me sale este error:

Interop type 'WIA.CommonDialogClass' cannot be embedded. Use the applicable interface instead.

Y esto:

'WIA.CommonDialogClass' does not contain a definition for 'ShowAcquireImage' and no extension method 'ShowAcquireImage' accepting a first argument of type 'WIA.CommonDialogClass' could be found (are you missing a using directive or an assembly reference?

supongo el segundo error se está levantando debido al primer error, ¿verdad?

¿Alguna sugerencia sobre cómo solucionar esto?

+0

He encontrado que CommonDialogClass funciona en .NET 3.5 y el problema que está experimentando se introdujo en versiones posteriores. –

Respuesta

26

El segundo error es causado por el primero. La función Insertar tipos de interoperabilidad solo admite interfaces de integración, no clases. Otros más que el establecimiento de esa opción en la referencia WIA en False y desplegar la biblioteca de interoperabilidad, también se puede fijar de esta manera:

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

interfaces COM poco intuitivo, pero que crean con la nueva operador está permitido. Debe agregar un prefijo al nombre del espacio de nombres porque CommonDialog es ambiguo con la clase CommonDialog de Winforms.

+1

irreal Casi funciona como una clase "dinámica", ya que no se obtiene intellisense para ninguna de las operaciones, pero en realidad funciona de la manera esperada. ¡Gracias amigo! –

9

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

Este error se produce porque el valor predeterminado es cierto para los tipos de propiedad Insertar interoperabilidad del conjunto de TestStand API de interoperabilidad que se hace referencia en el nuevo proyecto. Para resolver este error, cambie el valor de la propiedad Insertar Tipos de interoperabilidad en False siguiendo estos pasos:

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 

Enlaces relacionados: KnowledgeBase 595FQJPI: ¿Puedo utilizar Visual Studio 2010 con TestStand y llamada en .NET Framework 4.0 Código Módulos?

4

Simplemente, simplemente elija el conjunto de errores en el Panel de soluciones/Referencias. A continuación, presione Alt-Intro (Propiedades), busque "Insertar tipo de interoperabilidad" y establezca su valor en "Falso" si es verdadero Brgs!

Cuestiones relacionadas