Classe non può essere incorporato. Utilizzare l'interfaccia applicabile invece
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?
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!