Classe non può essere incorporato. Utilizzare l'interfaccia applicabile invece

StackOverflow https://stackoverflow.com/questions/4219605

  •  26-09-2019
  •  | 
  •  

Domanda

sto usando WIA per catturare un'immagine fron lo scanner al Windows Form. Ecco il codice che sto usando:

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

Quando si tenta di eseguire questo piccolo test, ottengo questo errore:

  

Tipo di Interop 'WIA.CommonDialogClass'   non può essere incorporato. Utilizzare il applicabile   interfacciarsi invece.

E questo:

  

'WIA.CommonDialogClass' non lo fa   contiene una definizione per   'ShowAcquireImage' e senza estensione   Metodo 'ShowAcquireImage' accettare un   primo parametro di tipo   'WIA.CommonDialogClass' stato trovato   (Che le manca una direttiva using o   un riferimento all'assembly?

sto cercando di indovinare il secondo errore è sorto a causa del primo errore, giusto?

Qualche suggerimento su come risolvere questo problema?

È stato utile?

Soluzione

Il secondo errore è causato dal primo. I tipi Embed Interop dispongono solo supporti incorporamento interfacce, non classi. Altro che solo impostando l'opzione sul riferimento WIA su False e distribuire la libreria di interoperabilità, si potrebbe anche risolvere il problema in questo modo:

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

poco intuitivo, ma la creazione di interfacce COM con il nuovo operatore è permesso. È necessario anteporre il nome del namespace perché CommonDialog è ambiguo con la classe Winforms CommonDialog.

Altri suggerimenti

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

Questo errore si verifica perché il valore predefinito è vero per l'interoperabilità Embed tipi di proprietà del TestStand API di interoperabilità assembly di riferimento nel nuovo progetto. Per risolvere questo errore, modificare il valore della tipi di proprietà Embed interoperabilità su False nel seguente modo:

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

Link correlati: KnowledgeBase 595FQJPI: È possibile utilizzare Visual Studio 2010 con TestStand e Call .NET Framework 4.0 moduli di codice?

Semplicemente, basta scegliere l'errore di assemblaggio in Pannello di Soluzione / Riferimenti. Quindi, premere Alt-Enter (Proprietà), trovare "Incorpora Interop Type" e impostare il valore su "False" se vero BRG!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top