web-dev-qa-db-fra.com

La classe ne peut pas être intégrée. Utilisez l'interface applicable à la place

J'utilise WIA pour capturer une image froner le scanner sur le formulaire Windows. Voici le code que j'utilise:

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

Lorsque vous essayez d'exécuter ce petit test, je reçois cette erreur:

Interop Type 'wia.commondialogclass' ne peut pas être intégré. Utilisez plutôt l'interface applicable.

Et ça:

"Wia.commondialogclass" ne contient pas de définition pour "showacquireImage" et aucune méthode d'extension 'showaCrireImage' acceptant un premier argument de type 'wia.commondialogclass' pourrait être trouvé (utilisez-vous une directive ou une référence d'assemblage?

Je suppose que la deuxième erreur est d'être augmentée à cause de la première erreur, non?

Toute suggestion sur la manière de résoudre ce problème?

23
delete

La 2e erreur est causée par la première. La fonctionnalité Types Interop Types d'intégration prend uniquement en charge les interfaces d'intégration et non les classes. Autre que simplement définir cette option sur la référence WIA à FAUX et déployer la bibliothèque Interop, vous pouvez également le réparer comme ceci:

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

Unintutier mais la création d'interfaces COM avec l'opérateur nouvea est autorisée. Vous devez préfixer le nom de l'espace de noms car -Commonialog est ambigu avec la classe Winforms Commonialog.

26
Hans Passant

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

Cette erreur se produit car la valeur par défaut est VRAI pour l'intégration des types Interop Types de l'assemblage Interop de Testand API référencé dans le nouveau projet. Pour résoudre cette erreur, modifiez la valeur de la propriété Intégrer Interop Types sur False en suivant ces étapes:

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

Liens associés: Knowledgebase 595FQJPI: Puis-je utiliser Visual Studio 2010 avec TestStand et Call .NET Framework 4.0 modules de code?

9
Ramezani r

Simplement, vous choisissez simplement l'assemblage d'erreur dans le panneau/références de solutions. Ensuite, appuyez sur Alt-Enter (Propriétés), trouvez "Type Interop Type" et définissez sa valeur sur "False" si c'est vrai BRGS!

4
Duy